Você não especificou como você adicionou seu cronjob. Isso faz uma grande diferença: se você usou crontab -e
em sua própria conta, os scripts são executados com seu usuário (e, portanto, a entrada crontab tem um campo a menos - o usuário para executá-lo, como é conhecido). Se você simplesmente copiou seu snippet acima para /etc/cron.d
, ele falharia, pois você não especificou um usuário (ou melhor, já que não encontra nenhum usuário chamado "bash"). Então você deve seguir os seguintes passos:
- atualize sua pergunta com informações sobre como você adicionou o cron job
- verifique os logs do sistema (
/var/log/syslog
; eles podem apontar para possíveis erros) - adicione alguma saída de depuração ao seu script
Backup.sh
para ver se ela foi iniciada
O terceiro ponto pode ser alcançado de várias maneiras:
- adicione um
>>/tmp/testlog.log
ao final da sua entrada crontab (para redirecionar a saída para um arquivo que você possa investigar; além disso, um2>&1
incluirá a saída do console de erros) - adicione algumas linhas ao seu próprio script, por exemplo, %código%
echo "Backup.sh started">/tmp/testlog.log
, você não deve dizer para usar bash
(o que faria com que usasse /bin/sh
em uma instalação padrão do Ubuntu), mas sim dash
. Então torne-o executável, e você pode até mesmo omitir o "bash" da sua entrada no crontab.
Atualização:
De acordo com o seu comentário sobre a minha resposta, você usou /bin/bash
para criar o trabalho e, de acordo com os registros do sistema, ele é executado, mas a definição é
*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh &>/dev/null
Isso redireciona toda a saída para o maior armazenamento em seu sistema, o "buraco negro": crontab -e
come tudo (mas nunca retorna nada). Redirecionar o STDOUT, assim como o STDERR desta maneira, rouba qualquer relatório de erro - então você nunca sabe que eles aconteceram, muito menos os detalhes. Para testes, você deve omitir completamente a parte /dev/null
. Mesmo que funcione, você deve apenas suprimir a saída desnecessária - caso contrário, você nunca saberá quando algo está errado. Então, é melhor deixar de fora o "e" comercial, pelo menos, então o Cron pode relatar quaisquer erros ocorridos.
Além disso: Quando a saída for redirecionada (como no seu caso para &>/dev/null
), acrescentar outro redirecionamento ao final não produzirá resultados, já que tudo já passou. Então eu tenho que ajustar o conselho acima de "adicionar ... ao final da sua entrada crontab" para "substituir isso na sua entrada crontab";)