Я запускаю скрипт, предоставленный rehmatworks для установки сертификата LetsEncrypt, который (в дополнение к первоначальной установке) устанавливает ежемесячный cronjob для автоматического продления. Все устанавливается нормально, однако, работа cron не выполняется, и я не могу понять, почему.
Вот задание cron (от root 'crontab -e'):
@monthly "sudo service nginx-sp stop && yes | letsencrypt --standalone renew &>/dev/null && service nginx-sp start && service nginx-sp reload"
, которое завершается ошибкой not found
:
/bin/sh: 1: sudo service nginx-sp stop && yes | letsencrypt --standalone renew &>/dev/null && service nginx-sp start && service nginx-sp reload: not found
Запуск непосредственно из команды Однако все работает нормально:
sudo service nginx-sp stop && yes | letsencrypt --standalone renew &>/dev/null && service nginx-sp start && service nginx-sp reload
Есть идеи, почему это работает из командной строки, а не через cron?
Обновление: rehmatworks с тех пор обновил исходный сценарий для решения этой проблемы.
Благодаря @steeldriver комментирует выше, я узнал, что основная проблема:
&>/dev/null
синтаксис удара ('sh', был бы >/dev/null 2>&1
). Для редактирования корня crontask использовать sudo crontab -e -u root
. Финал похож на это:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
@monthly service nginx-sp stop && yes | letsencrypt --standalone renew &>/dev/null && service nginx-sp start && service nginx-sp reload
#
До сих пор, кажется, что это работает (но подтвердите путем рассмотрения журналов).
Примечание: Не протестированный, но с точки зрения фиксации исходного сценария установки, не имея необходимость определять среду оболочки отдельно, возможно, что Вы могли перенести команду крона в подоболочку удара, чтобы удостовериться, что это выполняется в ударе (на askubuntu SE ответ):
bash -c "bashcommand"
Попытайтесь указать весь путь к двоичным файлам, которые Вы используете. Я предполагаю, что они не найдены, так как переменная $HOME или $PATH должны отличаться от корня и пользователя.
Если то, что я сказал, является проблемой, источник ее должен быть местоположением letsencrypt
двоичный файл, вероятно, не найденный корнем
Это, как уже сообщают, как проблема пишет сценарий поставщика:
https://github.com/rehmatworks/serverpilot-letsencrypt/issues/8
Таким образом, необходимо ожидать ответа там. Не легко дать Вам качественный ответ, если мы не знаем общий фон системы, похож на некоторую специальную среду.
Обновление: Проблема решена теперь Scriptowner на GitHub, контроль GitHub. rehmatworks прокомментировал 12 часов назад
Решение: повторно клонируйте сценарий, и Вы сможете сделать намного больше с большой простотой.
прошу прощения
chris