it-swarm.com.de

Wie leite ich die Ausgabe von cron in eine Datei um?

Ich habe ein Sicherungsskript, das ich zu einer bestimmten Tageszeit ausführen muss, daher verwende ich cron für diese Aufgabe und versuche innerhalb von cron auch, die Ausgabe des Sicherungsskripts auf logfile.

crontab -e

*/1 * * * * /home/ranveer/backup.sh &>> /home/ranveer/backup.log

Im obigen Cron-Eintrag leite ich beide stderr and stdout In eine Protokolldatei um.

Der obige Cron-Job wird gemäß syslog einwandfrei ausgeführt und führt die in der Datei backup.sh Erwähnte Aufgabe aus, schreibt jedoch nichts in die Protokolldatei.

/var/log/syslog

Oct 19 20:26:01 ranveer CRON[15214]: (ranveer) CMD (/home/ranveer/backup.sh &>> /home/ranveer/backup.log)

Wenn ich das Skript von cli aus starte, funktioniert es wie erforderlich und die Ausgabe wird in eine Protokolldatei geschrieben

[email protected]:~$ ./backup.sh &>> backup.log 
[email protected]:~$ cat backup.log
Fri Oct 19 20:28:01 IST 2012
successfully copied testdir
test.txt successfully copied
-------------------------------------------------------------------------------------
[email protected]:~$ 

Warum wird die Ausgabe der Datei nicht innerhalb von cron in die Datei umgeleitet?.

120
RanRag

Ich habe das Problem gelöst. Es gibt zwei Möglichkeiten:

M1

Ändern Sie die Umleitung von &>> bis 2>&1. Also jetzt crontab -e sieht aus wie

*/1 * * * * /home/ranveer/vimbackup.sh >> /home/ranveer/vimbackup.log 2>&1

Ich glaube das oben genannte funktioniert, weil cron standardmäßig sh verwendet, um die Aufgabe anstelle von bash auszuführen, also &>> wird von sh nicht unterstützt.

M2

Ändern Sie die Standard-Shell, indem Sie Shell=/bin/bash in dem crontab -e Datei.

173
RanRag

haftungsausschluss [1].

Ich möchte @ RanRags Antwort eine Fußnote oder einen Nachtrag hinzufügen.

Stellen Sie sicher, dass Ihre Shell-Umleitungssyntax mit /bin/sh übereinstimmt. Wenn Sie versuchen, eine Shell-Umleitungssyntax zu verwenden, die mit /bin/sh nicht gültig ist, schlägt Ihr Befehl fehl und Ihr Cron-Job wird niemals ausgeführt.

Wenn Sie in Ihren Konfigurationsdateien /etc/cron.d/example1 einen anderen Benutzer als root angeben und die Anmeldeshell dieses Benutzers nicht /bin/bash... ist, müssen Sie weiterhin die Syntax/bin/sh verwenden im Befehl /etc/cron.d/example1.


Zum Beispiel

Wenn Ihr Benutzer Shell csh oder zsh oder ksh für seine Login-Shell festgelegt hat. In Ihrer Konfigurationsdatei /etc/cron.d/example1 muss der Befehl die Syntax /bin/sh verwenden. Insbesondere muss jede Shell-Umleitung die Syntax /bin/sh haben.

Wenn Sie versuchen, beispielsweise die Shell-Umleitungssyntax csh in Ihrem /etc/cron.d/example1 zu verwenden, wird Ihr Cron-Job niemals ausgeführt. Die Protokolldatei für crond unter /var/log/cron besagt, dass der Befehl ausgeführt wird, der Befehl jedoch mit einem Syntaxfehler fehlerhaft ausgeführt wird, bevor Ihr Befehl ausgeführt wird.

Wo gibt crond Fehlermeldungen für einen Syntaxfehler aus?

Der Fehler wird in /var/log/cron nie gemeldet. crond gibt stattdessen standardmäßig alle Fehlermeldungen mit mail aus. Sie müssen also /var/spool/mail/${USER} überprüfen, um festzustellen, was der Fehler ist.

[1]

Haftungsausschluss

  • Diese Antwort setzt ein sysv System voraus
  • systemd Informationen können abweichen
  • Insbesondere wurden diese Informationen für centos-6 distro gelernt und gelten möglicherweise nicht für verschiedene sysv distros
    • Ich erwähne centos-6 speziell, weil verschiedene Distributionen eine andere crond Implementierung haben können, die sich von centos-6 unterscheidet
6