У меня есть CentOS 6.6
сервер со следующими установленными пакетами:
crontabs-1.10-33.el6.noarch
cronie-1.4.4-12.el6.x86_64
cronie-anacron-1.4.4-12.el6.x86_64
kernel-2.6.32-504.3.3.el6.x86_64
Иногда одно из заданий резервного копирования, запланированное на ежедневное выполнение, просто не запускается. Сценарий даже не называется в соответствии с /var/log/cron.log
. Интересно отметить, что другие задания, запланированные на одновременное выполнение, выполняются без проблем.
Я не могу воспроизвести проблему и не заметил на ней никаких паттернов. Если я ничего не делаю, то на следующий день работа выполняется правильно, как и ожидалось.
crond просто игнорирует только одно из множества заданий, которые должны выполняться в определенное время. Это происходит только спорадически.
Я читал в нескольких других местах, где люди говорят о добавлении пустой строки в конце crontab
файла. Работа, которую иногда не удается выполнить, действительно находится в последней строке моего crontab
файла. Я не смог найти никакого подтверждения, что это реальная или известная ошибка.
# tail -2 /var/spool/cron/postgres
* * * * * OTHERJOB
0 21 * * * /pg_backup.sh
Это все, что у меня есть в моем /var/log/cron.log
Mar 31 21:00:02 SERVERNAME [cron.info] CROND[19394]: (root) CMD (OTHERJOB)
Mar 31 21:00:02 SERVERNAME [cron.info] CROND[19418]: (postgres) CMD (/pg_backup.sh)
Mar 31 21:01:02 SERVERNAME [cron.info] CROND[20062]: (root) CMD (OTHERJOB)
Apr 1 21:00:02 SERVERNAME [cron.info] CROND[31349]: (root) CMD (OTHERJOB)
Apr 1 21:01:01 SERVERNAME [cron.info] CROND[32080]: (root) CMD (OTHERJOB)
Посмотрите, как OTHERJOB
всегда бегать, пока Apr 1
pg_backup.sh
не было даже выполнено.
Я уже пытался перезапустить, crond
но это продолжается. Это влияет на несколько серверов с одинаковой версией ОС, ядра и cron
RPM.
Существует более новая версия cronie
( 1.4.12
), однако ее обновление не вариант, так как мы уже используем последнюю доступную версию дляCentos 6.6
Я просмотрел список изменений для всех cronie
версий после mine ( 1.4.4
) и не нашел решения этой конкретной проблемы. Также проверил все сообщения коммита .
echo >/dev/null
например)?/var/log/audit/audit.log
.Ответы:
Оригинальный cron требовал, чтобы каждая запись заканчивалась символом новой строки, так что да, иногда вам нужна пустая строка или что-то в конце.
В некоторых версиях это исправлено или выдается предупреждение, например Ubuntu Maverik (10.10): crontab просматривает раздел диагностики внизу, в котором говорится, что предупреждение будет записано в системный журнал.
источник
Это первый ответ, который приходит с текстом поиска,
cron error getpwname failed
поэтому я решил опубликовать причину своей проблемы:Я использовал / etc / crontab, но забыл поставить пользователя перед командой.
т.е.
Вместо
Это дало ту же ошибку, иди разберись.
источник
мы используем
sssd
для удаленной аутентификации.crond
должен проверять наличие доступных пользователей перед выполнением заданий, и он делает это каждые 60 секунд.sssd
по умолчаниюclient_idle_timeout
это 60 секунд. поэтому у нас было состояние гонки междуsssd
иcrond
Мы только добрались до сути этой проблемы, потому что в версии
1.4.4-14
crond стал немного более подробным о некоторых ошибках.После обновления до этой версии мы начали видеть ошибку ниже, в то время как задание не запустилось:
что привело нас к этому: https://bugzilla.redhat.com/show_bug.cgi?id=1209600#c2
и, наконец, к этому: https://access.redhat.com/solutions/1125133
Предлагаемое решение по ссылке выше было добавлено в строку ниже
/etc/sssd/sssd.conf
:Вышеуказанное изменение устранило проблему для нас, и cron больше не пропускает задания.
источник