O trabalho do Cron não está executando

1

Eu estava fazendo um trabalho no cron para salvar meu mundo Minecraft do meu ram a cada 5 minutos. Eu testei o script e parece estar funcionando.

É assim que o script se parece:

#!/bin/sh


VOLATILE="/home/jonathan/Games/Minecraft/Server/world/"
PERMANENT="/home/jonathan/Games/Minecraft/Server/world_storage/"
rsync -r -t -v "$VOLATILE" "$PERMANENT"

Então, fui adicionar um cron job para executar o script a cada 5 minutos, e parece que não está sendo executado.

Este é o script que usei:

*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh

Alguém pode me ajudar por favor?

    
por user77242 16.07.2012 / 14:07

1 resposta

5

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:

  1. atualize sua pergunta com informações sobre como você adicionou o cron job
  2. verifique os logs do sistema ( /var/log/syslog ; eles podem apontar para possíveis erros)
  3. 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, um 2>&1 incluirá a saída do console de erros)
  • adicione algumas linhas ao seu próprio script, por exemplo, %código%
Além disso: como você pretende que seu script seja executado usando 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";)

    
por Izzy 16.07.2012 / 14:58