Ich habe versucht, einen Root-Cron-Job einzurichten, um ein Bash-Skript als Root auszuführen, das in Minute 7,37 ausgeführt wird, jede Stunde, jeden Tag im Monat, jeden Monat. Dieses Skript befindet sich in /usr/bin
und heißt tunlrupdate.sh
. Es aktualisiert den DNS von Tunlr.
$ ls -l /usr/bin/tunlrupdate.sh
-rwxr-xr-x 1 root root 2133 Sep 24 15:42 /usr/bin/tunlrupdate.sh
Dieses Bash-Skript finden Sie hier .
Beim Aufrufen schreibt das Skript, was in einem Protokoll in passiert /var/log/tunlr.log
Um diesen root-cron-Job hinzuzufügen, habe ich den Standard für die crontab von root verwendet
sudo crontab -e
Und diese 2 Zeilen am Ende eingefügt. Ich erwarte, dass cron das Skript als root ausführt.
# check for updated Tunlr DNS every 30 minutes at the hour + 7 mn and hour + 37 mn
07,37 * * * * root /usr/bin/tunlrupdate.sh
Ein späterer Befehl sudo crontab -l
bestätigte, dass der Cron-Job eingefügt wurde.
Ich habe Ubuntu neu gestartet und habe in der Protokolldatei überprüft, ob der Cron-Job ordnungsgemäß gestartet wurde. Die Protokolldatei enthält jedoch nichts, /var/log/tunlr.log
was bedeutet, dass der Job nie erfolgreich gestartet wurde.
Ich habe das überprüft, wenn ich das Skript über die Befehlszeile ausführe
sudo /usr/bin/tunlrupdate.sh
dann wird die Logdatei entsprechend aktualisiert.
Warum läuft dieser Cron-Job in meinem System nicht wie geplant?
UPDATE 1: Alle bisher vorgeschlagenen Lösungen funktionieren nicht. Ich danke Olli für eine CLI, die das Systemprotokoll auflistet sudo grep CRON /var/log/syslog
. Allerdings habe ich einen CRON-Fehler bekommen
CRON[13092]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ]
&& find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php
/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
mit dem vorgeschlagenen PATH = Einfügen und Verwenden des absoluten Pfads von root für Funktionen im Skript oder ohne diese hier vorgeschlagenen Lösungen. Ich bekomme immer noch diesen Fehler.
Nach einiger Suche geortet ich in der Datei die Fehler /usr/lib/php5/maxlifetime
wie erklärt hier :Change #!/bin/sh -e --> #!/bin/sh -x
Dann das CRON-Fehlerprotokoll in meinem System auflisten
sudo grep CRON /var/log/syslog
Feb 11 18:07:01 Marius-PC CRON[14067]: (root) CMD (root /usr/bin/tunlrupdate.sh)
Feb 11 18:07:01 Marius-PC CRON[14066]: (root) MAIL (mailed 1 byte of output; but got
status 0x00ff, #012)
Das Bash-Skript wird immer noch nicht ausgeführt. Dieses Mal wird kein Fehler im Protokoll angezeigt. Um sicherzugehen, dass dies nicht der Inhalt des Skripts war, habe ich das Skript auf die folgenden 3 Zeilen reduziert:
#!/bin/bash
LOGFILE=/var/log/tunlr.log
echo $LOGFILE >> $LOGFILE
Ich bekomme den Cronjob immer noch nicht durch. In die Protokolldatei wird nichts geschrieben. So kann sogar ein leeres Skript nicht in Cron ausgeführt werden? Ich verstehe es nicht. Ich weiß, dass ich ein Skript probiere, das auf diese zwei Zeilen reduziert ist:
#!/bin/bash
exit 0
Und immer noch das gleiche Fehlerprotokoll. Das Cron-Skript geht nicht durch ...