Летенкрипт автообновление cronjob терпит неудачу

Я запускаю скрипт, предоставленный 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?

0
задан 8 May 2018 в 02:26

3 ответа

Обновление: rehmatworks с тех пор обновил исходный сценарий для решения этой проблемы.

Благодаря @steeldriver комментирует выше, я узнал, что основная проблема:

  • crontab должен быть выполнен с помощью 'удара' (не значение по умолчанию 'sh'), потому что:
    • &>/dev/null синтаксис удара ('sh', был бы >/dev/null 2>&1).
    • sh не распознает команды в кавычках (производит 'не найденный' ошибка).
  • crontab должен определить переменные ПУТИ по умолчанию.
  • Если crontab выполняется под корнем, то не должны использовать 'sudo' (хотя, вероятно, не причиняет боль).

Для редактирования корня 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"

0
ответ дан 29 October 2019 в 09:27

Попытайтесь указать весь путь к двоичным файлам, которые Вы используете. Я предполагаю, что они не найдены, так как переменная $HOME или $PATH должны отличаться от корня и пользователя.

Если то, что я сказал, является проблемой, источник ее должен быть местоположением letsencrypt двоичный файл, вероятно, не найденный корнем

1
ответ дан 29 October 2019 в 09:27

Это, как уже сообщают, как проблема пишет сценарий поставщика:

https://github.com/rehmatworks/serverpilot-letsencrypt/issues/8

Таким образом, необходимо ожидать ответа там. Не легко дать Вам качественный ответ, если мы не знаем общий фон системы, похож на некоторую специальную среду.

Обновление: Проблема решена теперь Scriptowner на GitHub, контроль GitHub. rehmatworks прокомментировал 12 часов назад

Решение: повторно клонируйте сценарий, и Вы сможете сделать намного больше с большой простотой.

прошу прощения
chris

1
ответ дан 29 October 2019 в 09:27

Другие вопросы по тегам:

Похожие вопросы: