script cron não rodando no sudo

1

Estou com alguns problemas tentando chamar um script bash como cronjob , o qual simplesmente não será executado .

Aqui está a eliminação de algumas possíveis fontes de falha:

  • eu editei o cron via sudo crontab -e
  • O script deve ser executado todas as noites às 4 da manhã, então o comando é 0 4 * * * bash ~/nightly_backup.sh
  • O script está localizado em /home/myuser/nightly_backup.sh
  • O script é executado completamente por conta própria e não precisa de nenhuma entrada do usuário
  • Chamar manualmente via sudo bash ~/nightly_backup.sh funciona bem
  • Existe outro comando no crontab que está programado para ser executado a cada 5 minutos e funciona bem também ( fswebcam -r ... )

O que estou fazendo de errado?

Além disso: olhando para cima hoje, se o script foi executado, vejo o syslog que diz o seguinte:

Feb  7 04:00:01 localhost CRON[7767]: (root) CMD (bash ~/nightly_backup.sh)
Feb  7 04:00:01 localhost CRON[7764]: (CRON) info (No MTA installed, discarding output)
Feb  7 04:00:03 localhost CRON[7765]: (CRON) info (No MTA installed, discarding output)
  • O que significa "nenhum MTA instalado, descartando a saída" significa?
por taiBsu 07.02.2018 / 12:20

1 resposta

3

O problema básico parece ser: O uso de ~ que se refere ao home do usuário atual.

Mais detalhes sobre o problema:

  • Quando você executa o comando manualmente, o valor de ~ é /home/myuser ( myuser home)
  • Quando você executa o comando usando cron, o valor de ~ é /root ( root home)

Como o arquivo não está em /root/nightly_backup.sh cron não pode executá-lo.

Solução:

Substituir:

0 4 * * * bash ~/nightly_backup.sh

Com:

0 4 * * * /home/myuser/nightly_backup.sh
  

Note que você deve ter certeza de que o shell-script é executável, executando o seguinte comando (uma vez):

chmod +x /home/myuser/nightly_backup.sh

Observação: sobre sua outra pergunta

  

O que significa "nenhum MTA instalado, descartando a saída" significa?

Foi respondido aqui

Resumindo: Isso acontece porque as tarefas do cron estão produzindo a saída e, em seguida, o daemon do cron tenta enviar essa saída por e-mail para você, enquanto você não tem o serviço de e-mail instalado em seu sistema.

Você pode resolvê-lo usando um dos seguintes métodos (mais informações em aqui )

  • Ignore a mensagem
  • Instalar servidor de email
  • Redirecionar a saída da tarefa cron para / dev / null
  • Redirecione a saída da tarefa cron para logger e você a verá em syslog logs
por Yaron 07.02.2018 / 12:35