Befehl nach dem Semikolon nicht in Crontab ausgeführt?

618
HCSF

Hier ist mein Crontab:

42 17 * * 1-5 /bin/pkill -f 'MyExecutable.exe' ; touch /tmp/here.log 

Und danach lief /var/log/crones:

May 22 17:42:01 server1 CROND[326732]: (myuser) CMD (/bin/pkill -f 'MyExecutable.exe' ; touch /tmp/here.log) 

Und der Prozess MyExecutable.exestarb. Wurde here.logjedoch nicht erstellt /tmp.

Wenn ich es manuell unter myuser starte:

touch /tmp/here.log 

Die Datei wurde erfolgreich erstellt (daher sicher kein Berechtigungsproblem). Ich habe sogar versucht, toucheinen separaten Cronjob in Crontab zu erstellen, und es hat funktioniert.

Warum läuft das touchnach dem Semikolon nicht?

0
Ist es möglich, dass sich "touch" nicht im Standardpfad für crontab ("/ usr / bin") befindet? harrymc vor 5 Jahren 0
Nah, es ist da. Ich habe sogar versucht, in crontab einen separaten Cronjob zu erstellen, und es hat funktioniert. HCSF vor 5 Jahren 0
Was passiert, wenn Sie die beiden Befehle in Klammern setzen? harrymc vor 5 Jahren 0
wie 42 17 * * 1-5 (/ bin / pkill -f 'MyExecutable.exe'; berühren Sie /tmp/here.log)? HCSF vor 5 Jahren 0
Ja, versuch es so. harrymc vor 5 Jahren 0

2 Antworten auf die Frage

1
Kamil Maciorowski

Dies kann durch repliziert werden

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

Cron führt Ihren Befehl aus, indem er ihn an eine Shell ( shoder eine andere) weitergibt, so dass er der obigen Zeile sehr ähnlich ist. Unabhängig davon, ob irgendwelche ausgeführt wird MyExecutable.exeoder nicht, pkill -fstimmt (auch) mit der Shell überein und tötet sie, bevor sie ausgeführt wird touch. Das ist weil

Das Muster wird normalerweise nur mit dem Prozessnamen abgeglichen. Wenn festgelegt -fist, wird die vollständige Befehlszeile verwendet.

(Quelle: man 1 pkill)

Mögliche Lösungen:

  1. Wenn Sie nicht brauchen -f, lassen Sie es einfach fallen:

    42 17 * * 1-5 /bin/pkill 'MyExecutable.exe' ; touch /tmp/here.log 
  2. Wenn du es brauchst -f, führe touchvorher aus pkill:

    42 17 * * 1-5 touch /tmp/here.log ; /bin/pkill -f 'MyExecutable.exe' 
0
j1b3

Diese Frage bezieht sich auf diese Frage:

Zwei Befehle nacheinander in einem Cron-Job ausführen?

Sie sollten die beiden Befehle mit && anstelle von; trennen.

Ich glaube, dass && verwendet wird, wenn der Benutzer den zweiten Befehl wirklich ausführen möchte, nachdem der erste erfolgreich ist. Ein Benutzer möchte jedoch möglicherweise den 2. Befehl ausführen, unabhängig davon, ob der erste Befehl erfolgreich ist. HCSF vor 5 Jahren 0