Столкнулся сегодня с ошибкой в работе системного Cron. Текст ошибки совершенно не информативный, так что не понятно, в чем конкретно проблема. Начал разбираться самостоятельно, так как по выдаче гугла понял, что причин этой ошибки может быть масса. В итоге нашел решение при проверке /etc/crontab, который использовал для запуска периодических команд.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Началось все с того, что заметил проблемы с очисткой индексов elasticsearch с помощью curator. Он просто ничего не чистил и индексы распухли, заняв почти все место на диске. Пошел в консоль сервера смотреть, в чем проблема. Ручной запуск curator отработал, удалив устаревшие индексы. Стало понятно, что он просто не запускался. В /etc/crontab было правило на регулярный запуск.
Стал смотреть лог cron и нашел там ошибку:
Jun 3 04:04:01 [localhost] crond[811]: (/usr/bin/curator) ERROR (getpwnam() failed)
По тексту совершенно не понятно, в чем проблема. Быстро заглянув в гугл, понял, что однозначного ответа на причину ошибки не видно. Пошел еще раз смотреть crontab и понял, в чем проблема. Так как использовался системный cron, в нем надо указать имя пользователя, от которого будет работать команда. А я это забыл сделать. Должно быть так:
4 4 * * * root /usr/bin/curator --config /etc/curator/config.yml /etc/curator/action.yml
Пользователя root я забыл указать, поэтому и была ошибка исполнения. Не понятно, почему нельзя было нормально обработать эту ошибку и вывести ее в лог. Ведь очевидно же, что пользователя /usr/bin/curator в системных пользователях просто нет.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Спасибо, помогло.
тоже такое ловил
Добрый день.
В ubuntu 18 в "crontab -e" отлично отрабатывает скрипт:
0 12 * * * /root/backupjbars.sh > /dev/null 2>&1
В CentOS 7 тот же скрипт отрабатывал частично, а именно слал исключительно почтовое уведомление что бекап создан но это было не так. Добавил как в статье в "crontab -e"
0 2 * * * root /home/ruskan_user/backupjbars.sh > /dev/null 2>&1
после чего в логах получаю ту же ошибку что в статье, даже ложные почтовые уведомления не приходят что в есть в скрипте. Пробовал вместо root указывать своего пользователя от имени которого логинюсь в систему.
Одно отличие вижу, что скрипт запускается из разных папок, в случае с убуной в /root, в CentOS из домашней папки пользователя.
Подскажите направление куда посмотреть.
Вы путаете понятия. Пользователя нужно добавлять только если вы используете системный крон. По "crontab -e" открывается cron конкретного пользователя. Там не нужно его указывать.
Какая система интересно?
На стареньком redhat (5.5) и centos 7 работает без указания имени пользователя.
Конкретно эту ошибку увидел на Centos 7. Без указания пользователя системный крон с конфигом в /etc/crontab точно работать не будет.
Да, упустил слово "системный cron". У меня от конкретного пользователя запускаются. Спасибо, раньше не знал, что такая проблема возможно. Не приходилось системный задействовать.
Я обычно все в системном держу с указанием пользователей. Так удобнее отслеживать все задания в одном месте.
Вот он хваленный systemd c journald ничего не понятно
ERROR (getpwnam() failed)
Ранее встречался с подобной ошибкой, когда имел привычку подолгу держать консоли открытыми,
и запускать скрипты из папки с приложением. А эту папку автоматика перезаписывала с обновлением версии.
Поэтому название папки оставалось прежним, а вот её идентификатор менялся, и скрипт падал с ошибкой.
Починилось это просто - выйти из папки и зайти обратно. Но информации в гугле действительно не хватало.