Aqui está o meu crontab:
42 17 * * 1-5 /bin/pkill -f 'MyExecutable.exe' ; touch /tmp/here.log
E de acordo com /var/log/cron
ele correu:
May 22 17:42:01 server1 CROND[326732]: (myuser) CMD (/bin/pkill -f 'MyExecutable.exe' ; touch /tmp/here.log)
E o processo de MyExecutable.exe
morreu. No entanto, here.log
não foi criado /tmp
.
Se eu o executar manualmente em myuser:
touch /tmp/here.log
o arquivo foi criado com sucesso (portanto, não há problema de permissão, com certeza). Eu até tentei mudar touch
para um cronjob separado no crontab, e funcionou.
Por que touch
o ponto e vírgula não é executado?
touch
não esteja no caminho crontab padrão (/usr/bin
)?Respostas:
Esta questão está relacionada com esta:
Executando dois comandos sequencialmente em um trabalho cron?
Você deve separar os dois comandos com &&, em vez de;
fonte
Isso pode ser replicado por
O Cron executa seu comando passando-o para um shell (
sh
ou outro), de modo que é muito semelhante à linha acima. Independentemente deMyExecutable.exe
executar ou não, elepkill -f
combina (também) com o shell e o mata antes de executartouch
. Isto é porque(fonte
man 1 pkill
:)Soluções possíveis:
Se você não precisar
-f
, basta soltá-lo:Se você precisar
-f
, executetouch
antespkill
:fonte