Ich habe eine Liste von Cron-Jobs.
00 21 * * * sh ~/db_backup.sh
20 21 * * * sh ~/update.sh
* 5 1 * * sh ~/db_vacuum.sh
Der erste Job erstellt eine Sicherung einer Datenbank, die auf einem Ubuntu-Server ausgeführt wird. Dies funktioniert, wenn ich das Datum überprüfe, an dem die Sicherungsdatei zuletzt geändert wurde.
date -r db.sql
Mein dritter Cron-Job staubsaugt meine Datenbank zu Beginn eines jeden Monats. Mein Problem ist in meinem zweiten Job. Dieser Job führt mehrere URL-Rückrufe in einer von mir ausgeführten DJango-Anwendung aus:
sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command1"
sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command2"
sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command3"
sudo docker exec -it web_1 wget -t 0 "http://127.0.0.1:8080/admin/command4"
Ich überprüfe die erwarteten Ausgaben und es scheint, dass die Datei überhaupt nicht ausgeführt wurde. Das Seltsame ist, wenn ich sie manuell mit dem folgenden Befehl ausführe:
sh ~/update.sh
Es läuft einwandfrei, gibt es einen Haken bei Wgets, die mir fehlen? Falls es nicht offensichtlich ist, zeigen die wget-Befehle auf einen Docker-Container, auf dem der Server ausgeführt wird.
AKTUALISIEREN:
Ich habe versucht, Protokolldateien als Ausgabedateien an die wget-Befehle in meiner .sh-Datei anzuhängen. Nach dem erneuten Überprüfen nach der festgelegten Ausführungszeit des Cron-Jobs befanden sich keine Protokolldateien im Verzeichnis.
Ich habe dann die aktuellen Systemprotokolle überprüft und festgestellt, dass diese Meldung im Protokoll angezeigt wurde, sobald meine .sh-Datei ausgeführt wurde.
(CRON) info (No MTA installed, discarding output)
Könnte das irgendwie zusammenhängen?
quelle
docker
, dassudo
Passwort ist nicht erforderlich , oder?/usr/bin/docker
docker
Gruppe gehört (grep '^docker' /etc/passwd
)docker
, ist dassudo
Kennwort erforderlich . wenndocker
das erfordertsudo
Passwort und Sie nicht hinzu ,docker
umNOPASSWD
in/etc/sudoers
dersudo
ist Befehl , um die Ausführung des Skripts zu stoppen./bin/sh
using ausgeführt werdenPATH=/usr/bin:/bin
. Ich glaube,docker
ist woanders installiert.Antworten:
Ihr Problem wird
sudo
in Ihrem Skript verwendet. Cron kann niemals Ihr Sudo-Passwort eingeben.quelle
Ich stelle fest, dass Sie sh verwenden, um den Cronjob aufzurufen. Sh ist jedoch eine Teilmenge von Bash und kann Ihren Cronjob möglicherweise nicht ausführen. Auch das manuelle Ausführen der Aufgabe ist nicht unbedingt dasselbe wie das Ausführen mit cron. Bitte ändern Sie sh, um den Cronjob zu schlagen und zu sehen, was passiert.
Die Fehlermeldung zu MTA, die in der Protokolldatei angezeigt wird, bedeutet, dass kein Mail Transfer Agent installiert ist. Dies bedeutet, dass keine Software zum Senden von E-Mail-Nachrichten installiert ist. Cron versucht, E-Mail-Nachrichten zu senden, um Sie über etwas zu informieren. Es könnte eine Fehlermeldung über den fehlgeschlagenen Cronjob sein.
quelle