Задача 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 соответственно. Опубликовать вывод здесь, если вопросы остались.