Comando após o ponto e vírgula não executado no Crontab?

0

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 , foi executado:

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 em /tmp .

Se eu manualmente executá-lo em myuser:

touch /tmp/here.log

o arquivo é criado com sucesso (portanto, não há problema de permissão com certeza). Eu até tentei mover touch para um cronjob separado no crontab, e funcionou.

Por que não touch após a execução do ponto-e-vírgula?

    
por HCSF 22.05.2018 / 11:53

2 respostas

1

Isso pode ser replicado por

sh -c 'pkill -f "MyExecutable.exe" ; touch /tmp/here.log'

Cron executa seu comando passando-o para um shell ( sh ou outro), então é muito semelhante à linha acima. Independentemente de haver MyExecutable.exe em execução ou não, pkill -f corresponde (também) ao shell e o mata antes de executar touch . Isso é porque

The pattern is normally only matched against the process name. When -f is set, the full command line is used.

(fonte: man 1 pkill )

Soluções possíveis:

  1. Se você não precisa de -f , basta soltá-lo:

    42 17 * * 1-5 /bin/pkill 'MyExecutable.exe' ;  touch /tmp/here.log
    
  2. Se você precisar de -f , execute touch antes de pkill :

    42 17 * * 1-5 touch /tmp/here.log ; /bin/pkill -f 'MyExecutable.exe'
    
por 28.10.2018 / 13:00
0

Esta questão está relacionada com esta:

Corrida dois comandos sequencialmente em um cron job?

Você deve separar os dois comandos com & & amp ;, em vez de;

    
por 22.05.2018 / 15:40