Этот вопрос Здесь уже есть ответ:
У меня есть эта задача 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 Renew требует root.
Файл журнала все еще не существует по прошествии нескольких дней, что означает, что задача не выполняется. Почему?
Ваша запись 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
будет содержать список среды
для пользователя root cron ". Как только вы это узнаете, измените запись crontab
для certbot
соответствующим образом. Опубликуйте результат здесь, если остались вопросы.