Befehlsausgabe in Datei in Crontab funktioniert nicht

Befehlsausgabe in Datei in Crontab funktioniert nicht

Ich habe ein Problem, die Ausgabe eines Befehls auf der Befehlszeile anzuzeigen und sie mit Raspbian Buster auch in eine Datei auf meinem Raspberry Pi 4 umzuleiten.

Ich beginne sudo crontab -e.

Dies sind meine Grundaussagen:

0 */5 * * * sudo /home/pi/linux_scripts/block/blockips.sh > /var/log/blockips.log 2>&1 && sudo ufw status verbose > /var/log/ufw-status.log

Der erste Teil funktioniert, der zweite jedoch nicht, da beim Schreiben in ein Berechtigungsfehler vorliegt ufw-status.log. Fehlermeldung:-bash: /var/log/blockips.log: Keine Berechtigung

Also habe ich mehrere Threads gelesen und Folgendes ausprobiert:

0 */5 * * * sudo /home/pi/linux_scripts/block/blockips.sh > /var/log/blockips.log 2>&1 && sudo ufw status verbose | sudo tee /var/log/ufw-status.log

Das funktioniert nicht. Die Datei ist nach mehreren Tagen immer noch nicht geändert. Aber wenn ich es nur sudo ufw status verbose | sudo tee /var/log/ufw-status.logüber die Kommandozeile (nicht über Crontab) versuche, funktioniert es.

Liegt der Fehler in der Crontab oder hängt der Fehler von der ersten Anweisung ab?

Kannst du mir helfen?

Danke.

Antwort1

Sie haben verwendet sudo crontab -e, das die Root-Crontab bearbeitet. Daher benötigen Sie sudodie crontabDatei selbst nicht – und sollten sie auch nicht verwenden, da die Befehle bereits als Root ausgeführt werden.

Ihr Crontab-Befehl kann daher folgendermaßen vereinfacht werden

0 */5 * * * /home/pi/linux_scripts/block/blockips.sh > /var/log/blockips.log 2>&1 && ufw status verbose > /var/log/ufw-status.log

Es ist keine gute Praxis, Benutzerskripte (z. B. solche im Home-Verzeichnis eines Benutzers) als Root auszuführen, aber wenn Sie der einzige Benutzer auf dem Computer sind, ist dies akzeptabel. (Der Grund dafür ist, dass Ihr normaler Benutzer das Skript beliebig ändern kann und Root es dann pflichtbewusst für ihn ausführt.)

Wenn Sie Fehler erhalten, sollten Sie zuerst in der lokalen E-Mail nachsehen, von der crondie Fehler gesendet werden. Sie können den Befehl mailoder verwenden mailx(als Root, da er von einer Root-Crontab stammt) oderschummelnund nur less /var/mail/rootum die Roh-Maildatei anzuzeigen.

verwandte Informationen