Задача Cron не запускается
У меня есть эта задача crontab:
$ sudo crontab -l -u root
0 22 * * * certbot renew --cert-name app.my_website123.net --pre-hook "systemctl nginx stop" --post-hook "systemctl nginx start" >> /home/my_user/cron_log1.log 2>&1
Для обновления certbot требуется root.
Файл журнала все еще не существует, через несколько дней, что означает, что задача не выполняется. Это почему?
1 ответ
Ваш crontab
запись выглядит хорошо, с одним возможным исключением: certbot
вероятно должен иметь полную спецификацию пути. Например:
0 22 * * * /path/to/certbot .....
Если это не решит проблему, нам потребуется дополнительная информация. Я подозреваю, что проблема заключается в окружающей среде, но мы должны спросить cron
какая среда была создана для root
пользователь. Мы можем сформулировать наш вопрос следующим образом:
- Создайте сценарий оболочки в вашем домашнем каталоге (
~/
) следующим образом (или с редактором по вашему выбору):
$ nano ~/envtst.sh
- Введите следующее в редакторе после настройки для вашей системы / пользователя:
#!/bin/sh
/bin/echo "env report follows for user "$USER >> /home/you/envtst.sh.out
/usr/bin/env >> /home/you/envtst.sh.out
/bin/echo "env report for user "$USER" concluded" >> /home/you/envtst.sh.out
/bin/echo " " >> /home/you/envtst.sh.out
- Сохраните файл, выйдите из редактора и установите права доступа к файлу как исполняемые.
$ chmod a+rx ~/envtst.sh
- Запустите только что созданный скрипт и просмотрите результат в
/home/you/envtst.sh.out
, Этот вывод покажет вашу текущую среду как$USER
Вы вошли как:
$ ./envtst.sh $$ cat /home/you/envtst.sh.out
- Открыть свой
crontab
для редактирования:
$ crontab -e -u root
- Введите следующую строку в нижней части вашего
crontab
:
* * * * * /home/you/envtst.sh >> /home/you/envtst.sh.err 2>&1
Выходной файл /home/you/envtst.sh.out
будет содержать список environment
для "пользователя root cron". Как только вы это знаете, настройте crontab
запись для certbot
соответственно. Опубликовать вывод здесь, если вопросы остались.