Seu problema é usar sudo
no seu script. Cron pode nunca digitar sua senha sudo.
Eu tenho uma lista de tarefas agendadas.
00 21 * * * sh ~/db_backup.sh
20 21 * * * sh ~/update.sh
* 5 1 * * sh ~/db_vacuum.sh
O primeiro trabalho faz um backup de um banco de dados que estou executando em um servidor Ubuntu, isso funciona enquanto eu verifico a data em que o arquivo de backup foi modificado pela última vez usando:
date -r db.sql
Meu terceiro trabalho cron apenas esvazia meu banco de dados no início de cada mês. Meu problema está no meu segundo emprego. Este trabalho executa vários retornos de chamada de url em um aplicativo DJango em execução:
sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command1"
sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command2"
sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command3"
sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command4"
Eu verifico as saídas esperadas e parece que o arquivo não foi executado, o mais estranho é se eu o executar manualmente com o comando:
sh ~/update.sh
Funciona sem falhas, há algum problema com o que estou perdendo? Caso isso não seja óbvio, os comandos do wget estão apontando para um contêiner docker executando o servidor.
ATUALIZAÇÃO:
Eu tentei anexar arquivos de log como arquivos de saída aos comandos wget no meu arquivo .sh. Após a verificação após o tempo de execução da tarefa cron, não havia arquivos de log no diretório.
Em seguida, verifiquei os logs do sistema e notei que essa mensagem apareceu no log no segundo após o meu arquivo .sh ser executado.
(CRON) info (No MTA installed, discarding output)
Isso poderia estar relacionado de alguma forma?
Seu problema é usar sudo
no seu script. Cron pode nunca digitar sua senha sudo.
Eu notei que você usa sh para invocar o cronjob, no entanto sh é um subconjunto do bash e pode não ser capaz de executar o seu cronjob. Também executar a tarefa manualmente não é necessariamente o mesmo que executá-la pelo cron. Por favor, mude sh para bash no cronjob e veja o que acontece.
A mensagem de erro sobre o MTA que você vê no arquivo de log significa que você não tem o Mail Transfer Agent instalado, o que significa que você não tem o software instalado para enviar mensagens de e-mail. Cron tenta enviar mensagens de correio para informá-lo sobre algo. Pode ser uma mensagem de erro sobre o cronjob com falha.
Tags command-line bash cron wget