Crontab a execução de vários comandos, mas o último comando é omitido

0

Eu sei como executar vários comandos em uma linha crontab, mas não consigo entender porque meu último comando não está sendo executado. Meu crontab (root) é como

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

O que eu quero alcançar:. Escreva a data atual para arquivo certbot_cronjob_log.txt, em seguida, executar o script autorenew "certbot-auto", escrever a sua saída para o arquivo e reinicie nginx

Faz tudo até o ponto "restart nginx". Quando executo exatamente esse comando inteiro no meu terminal (como root) ele está funcionando e o nginx é reiniciado.

Eu já tentei isso:

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' 

Alguma idéia?

    
por Lumpy 14.07.2017 / 13:13

1 resposta

2

O diretório /usr/sbin (onde o comando service do upstart mora) não está no caminho padrão do crontab, portanto você precisará adicionar uma atribuição PATH explícita no topo do seu arquivo crontab, por exemplo:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

ou use o caminho completo em seu comando

/usr/sbin/service nginx restart

Você precisará fazer isso se você mantê-lo como um comando in-line ou dividi-lo em um script de shell (embora você tenha a opção de definir o PATH no script versus no arquivo crontab ).

FWIW, uma vez que as variantes desta pergunta são frequentemente feitas, aqui está o ambiente padrão do cron no meu sistema 16.04, obtido executando /usr/bin/printenv > /tmp/cronenv do crontab do root:

LANGUAGE=en_CA:en
HOME=/root
LOGNAME=root
PATH=/usr/bin:/bin
LANG=en_CA.UTF-8
SHELL=/bin/sh
PWD=/root

Observe o quão mínimo é - geralmente é por isso que comandos ou scripts que rodam bem em um shell interativo falham quando executados pelo cron.

    
por steeldriver 14.07.2017 / 18:35