Я знаю, как выполниться, несколько управляют в одной crontab строке, но я не могу понять, почему моя последняя команда не выполняется. Мой (корень) crontab похож
5 0 1,15 * * echo $(date) >> /root/certbot_cronjob_log.txt && /usr/services/certbot/certbot-auto renew --text >>/root/certbot_cronjob_log.txt 2>&1 && service nginx restart
Чего я хочу достигнуть: Запишите текущую дату для регистрации certbot_cronjob_log.txt, затем запустите автовозобновить "certbot-автоматический" скрипт, запишите, что это производится в файл, и затем перезапустите nginx.
Это делает все до точки "перезапуск nginx". Когда я выполняю точно эту целую команду в своем терминале (как корень), это работает и перезапуски nginx.
Я уже попробовал это:
5 0 1,15 * * bash -c 'echo $(date) >> /root/certbot_cronjob_log.txt && /usr/services/certbot/certbot-auto renew --text >>/root/certbot_cronjob_log.txt 2>&1 && service nginx restart'
Какие-либо идеи?
/usr/sbin
каталог (где выскочка service
управляйте жизнями), не находится в значении по умолчанию crontab путь, таким образом, необходимо будет или добавить явное PATH
присвоение в вершине Вашего crontab файла, например:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
или используйте полный путь в своей команде
/usr/sbin/service nginx restart
Необходимо будет сделать это, сохраняете ли Вы его как встроенную команду или выламываете его в сценарий оболочки (хотя у Вас затем был бы выбор установки PATH
в сценарии по сравнению с в crontab файле).
FWIW начиная с вариантов этого вопроса часто спрашивают, вот среда крона по умолчанию в моих 16,04 системах, полученных путем выполнения /usr/bin/printenv > /tmp/cronenv
от crontab корня:
LANGUAGE=en_CA:en
HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
LANG=en_CA.UTF-8
SHELL=/bin/sh
PWD=/root
Отметьте, насколько минимальный это - это часто, почему команды или сценарии, которые хорошо работают в интерактивном сбое оболочки, когда выполнено от крона.