o cronjob não é executado quando não está logado

6

RESOLVIDO, veja resposta 'inútil'.

Eu tenho um cronjob no meu crontab.

Quando eu especificar o trabalho a ser executado em 2 minutos, eu espero, e então eu posso ver os arquivos criados pelo trabalho, eu posso ver o processo com ps. O trabalho leva pelo menos 10 minutos para ser concluído.

Mas, se eu especificar o trabalho a ser executado em 2 minutos, e então eu sair, eu volto alguns minutos depois, e parece que o trabalho não foi executado (nenhum arquivo criado e processo não está em ps ).

Quando eu olho para o / var / log / syslog eu posso ver que o trabalho 'começou', mas imediatamente (no mesmo segundo) o cron tenta enviar um email. Provavelmente o email com o resultado. (bem, o sendmail não está configurado corretamente, mas isso não deve ser a causa raiz).

Você tem alguma ideia?

Aqui estão alguns exemplos concretos: (python é o nome da minha máquina)

Eu edito o crontab usando o crontab -e.
Aqui está o crontab:

user@python:~$ crontab -l
[...]
# m h  dom mon dow   command

50 9 * * * /home/user/scripts_automated/crontab1.sh

Ele deve ser exibido às 9:50

Aqui está o conteúdo do / var / log / syslog:

[...]
Nov  6 09:48:02 python crontab[30913]: (user) BEGIN EDIT (user)
Nov  6 09:48:18 python crontab[30913]: (user) REPLACE (user)
Nov  6 09:48:18 python crontab[30913]: (user) END EDIT (user)
Nov  6 09:50:01 python CRON[30936]: (user) CMD (/home/user/scripts_automated/crontab1.sh)
Nov  6 09:50:01 python sendmail[30938]: sA68o1a4030938: from=user, size=347, class=0, nrcpts=1, msgid=<201411060850.sA68o1a4030938@python>, relay=user@localhost
[...]

Como você pode ver no log, eu editei o crontab às 09:48:02, depois fiz o logout. Volto na máquina (com ssh ) e o trabalho não produziu nenhum arquivo que deveria ter sido produzido.

Aqui está o conteúdo do script:

user@python:~$ cat scripts_automated/crontab1.sh


#  0  ------------------------------------------------------

datenow='date +%F_%H-%M-%S'
/home/user/scripts_automated/script_1_cisco_grab.sh > /home/user/scripts_automated/crontab/run_${datenow}_.txt 2>&1 &
echo $! > /home/user/scripts_automated/crontab/pid_${datenow}.txt
ln -s /home/user/scripts_automated/crontab/pid_${datenow}.txt /home/user/scripts_automated/crontab/pid_last_run.txt

e nenhum arquivo é produzido. Eu esperaria pelo menos que o arquivo pid_${datenow}.txt existisse com o pid do comando background. Mas nada. Se eu não fizer logout, os scripts serão executados, produzirá arquivos de saída, pid_${datenow} file e assim por diante ...

    
por Stef 06.11.2014 / 11:46

1 resposta

6

Você deve colocar seu script em um diretório separado, que com certeza estará disponível enquanto a tarefa cron estiver sendo executada, por exemplo, /usr/local/bin/ .

Também é bom escrever crontab entradas como esta:

M H * * *  test -x /usr/local/bin/myscript.sh || /usr/local/bin/myscript.sh

para que o crontab nem tente executar o script se ele não estiver disponível.

Você suspeita que o logout é o problema, o que você deve ter tentado também é sair e, em seguida, voltar no tempo para o crontab executar e depois observar. Dessa forma, você poderia ter diminuído se o logout foi o problema ou o não estar logado.

    
por 06.11.2014 / 12:32

Tags