Я использую Crontab на своем компьютере для запуска множества скриптов curl, они работают отлично, 40 из них работают.
Но скрипты, которые у меня есть в корневом Crontab, использующие команду «sudo crontab -e», не работают. Они перестали работать около месяца назад и прекрасно работали более 2 лет.
Пытался поговорить с людьми с сервера, но никто из них не имеет ни малейшего представления, в чем может быть проблема. Кстати, я не эксперт по серверам, я могу следовать руководству, но это все :)
Я пробовал: перезапустить службу cron, «установить новый crontab», запустить скрипты в обычном crontab с использованием пользователя root, перезапустить сервер, удалить все в файле, удалить MAILTO.
Все скрипты работают, если их просто запустить вручную.
Вот штраф, который не работает:
MAILTO=""
2 3 * * * "/usr/local/scripts/backup-mysql.sh"
25 3 * * * "/usr/local/scripts/backup-prestashop.sh"
решение1
Наиболее полезным должно быть получение сообщений об ошибках.
2 3 * * * { date; bash -v "/usr/local/scripts/backup-mysql.sh"; date; } &>/tmp/cron-backup-mysql.log
25 3 * * * { date; bash -v "/usr/local/scripts/backup-prestashop.sh"; date; } &>/tmp/cron-backup-prestashop.log
Вывод записывается в /tmp/cron-backup-mysql.log
и /tmp/cron-backup-prestashop.log
. bash -v
выводит строки скрипта по мере их чтения.
Вы можете проверить владельца файла, чтобы убедиться, что он запущен как root. Затем прочитайте файл, у вас есть время начала и окончания, чтобы проверить, завершен ли запуск и соответствует ли продолжительность ожидаемой.
Если теперь скрипт работает правильно, проблема, вероятно, была в неявном вызове оболочки (удалить bash -v
из crontab и добавить echo SHELL = $SHELL
в скрипт) или в отсутствии разрешения на выполнение скрипта ( chmod +x
).
Если скрипт падает, bash -v
поможет вам найти ошибку. Вы можете показать больше деталей, заменив -v
на -x
, но это заполнит вывод каждым выражением по мере их оценки.