Warum nicht mein Cron.d pro Minute Job laufen?

Ich habe ein paar Pfeile geworfen und versucht, ein Python-Skript von mir jede Minute auszuführen. Also dachte ich, ich würde es vereinfachen, nur einmal pro Minute die "einfachste Sache zu tun, die möglicherweise funktionieren könnte" (ich führe Debian/testing aus).

Ich habe eine einzeilige Datei in /etc/cron.d/perminute erstellt:

* * * * * /bin/touch /home/me/ding_dong

Es gehört root und ist ausführbar (nicht sicher, ob eines davon wichtig ist). Und dann tat ich:

sudo service cron reload

Und dann lehn dich zurück und fange an zu laufen ls -ltr immer wieder in meinem home-Verzeichnis (/home/me). Aber meine ding_dong-Datei wird nie angezeigt. Ich weiß, wenn ich ein sudo /bin/touch /home/me/ding_dong mache, wird es sofort angezeigt.

Offensichtlich fehlt hier etwas Dummes.

 34
Author: terdon, 2013-10-23

3 answers

Wenn Sie eine Cron-Konfiguration in /etc/cron.d/ oder in /etc/crontab hinzufügen, müssen Sie in Ihrem Beispiel den Benutzernamen hinzufügen, in welchem Kontext der Befehl ausgeführt werden soll

* * * * * root /bin/touch /home/me/ding_dong

Und nur ein Hinweis von mir: Sie müssen ls -ltr nicht immer wieder ausführen, sondern nur watch -n 5 "ls -ltr" und es wird der Befehl alle 5 Sekunden ausgeführt (oder ein anderer Wert durch Ersetzen von 5 durch das, was Sie wollen).

 47
Author: noggerl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-09-02 06:20:35

Um einen neuen cron - Job zu erstellen, sollten Sie crontab -e als Benutzer ausführen, den Sie ausführen möchten. Fügen Sie dann die entsprechende Zeile im angezeigten Editorfenster hinzu:

* * * * * /bin/touch /home/me/ding_dong

Die Art und Weise, wie Sie es tun, erfordert ein anderes Format und ist sowieso keine gute Idee. Crontabs in /etc/cron.d haben ein etwas anderes Format, sie erfordern einen Benutzernamen, unter dem ausgeführt werden soll. Beispiel:

* * * * * USERNAME /bin/touch /home/me/ding_dong

Ein guter Trick (wie von @cronpoetlaureate vorgeschlagen) besteht darin, den Standardfehler Ihrer Cron-Jobs zu erfassen, der kann helfen, sie zu debuggen. Beispiel:

* * * * * /bin/touch /home/me/ding_dong 2>/tmp/error
 3
Author: terdon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-05-20 22:00:55

Ein möglicher Fehler ist hier wie es wird eine einzeilige Datei erstellt. Aus Ubuntu-Dokumentation:

...zeile hat fünf Zeit-und Datumsfelder, gefolgt von einem Befehl, gefolgt von einem newline-Zeichen.

Zum Beispiel funktioniert diese Art der Erstellung nicht:

printf "* * * * * /bin/touch /home/me/ding_dong" > /etc/cron.d/ding_dong
 2
Author: okoloBasii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-12-19 23:22:15