Ich habe ein Skript a.sh
mit einem sftp
Befehl:
echo "Starting to sftp..."
sftp [email protected] << END_SCRIPT
ls
mput *.csv.gz
bye
END_SCRIPT
echo "Sftp successfully."
Wenn ich es interaktiv ausführe, wird die Protokollausgabe von sftp
angezeigt. Wenn ich es jedoch in einer Crontab einstelle und die Standardausgabe mit in eine Datei umleite >
, wird nur die Ausgabe der beiden echo
Anweisungen angezeigt. Wie kann ich das Protokoll aus dem sftp
Befehl abrufen?
BEARBEITEN:
Ich habe die folgenden Formulare ausprobiert und es hat auch nicht funktioniert.
sftp -b batch_file.txt[email geschützt](Weiterleitung von cron)
sftp -b batch_file.txt[email geschützt]>> some_file.log (Weiterleitung von cron + Weiterleitung von dieser Zeile)
Ich denke, das Problem hängt mit der Natur von SFTP zusammen, das, wie in der Manpage angegeben, interaktiv ausgeführt werden soll. Aber ich kann die Lösung nicht finden.
Meine Verteilung:Red Hat Enterprise Linux AS release 3 (Taroon Update 2)
der Crontab-Eintrag:
52 14 * * * sh /home/xxx/testing/xxx.sh > /home/xxx/testing/xxx_`date +\%Y\%m\%d`.log
Und das Protokoll wird mit einer Zeit erstellt, die dem Crontab-Eintrag entspricht.
SSH-Version:
OpenSSH_3.6.1p2, SSH protocols 1.5/2.0, OpenSSL 0x0090701f
BEARBEITEN:
Ich habe festgestellt, dass die Meldung von SFTP protokolliert wird, wenn ich die Ausgabe von SFTP in der Skriptdatei in eine Textdatei umleite. Dann entferne ich die Protokolldatei und plane sie mit Cron. Nach der Cron-Ausführung wird die Protokolldatei generiert, enthält aber keine Meldung von SFTP. Stattdessen enthält sie nur das Protokoll einer anderen Anweisung in der Skriptdatei.
Wenn ich die Ausgabe von SFTP in eine Skriptdatei umleite und interaktiv ausführe, ist das Protokoll vollkommen in Ordnung. Wenn ich es jedoch mit Cron geplant habe (keine Umleitung im Crontab-Eintrag, einfach planen), ist auch das Protokoll von SFTP weg.
Antwort1
So wie es aussieht, AusgabeumleitungIstauftreten, aber Sie möchten wahrscheinlich stderr
auch einschließen. Versuchen Sie Folgendes in Ihrer Crontab:
52 14 * * * sh /home/xxx/testing/xxx.sh > /home/xxx/testing/xxx_`date +\%Y\%m\%d`.log 2>&1
Beachten Sie das 2>&1
am Ende. Es bedeutet: „Leiten Sie Dateideskriptor 2, stderr
, zu Dateideskriptor 1, stdout
, um.“ Da Sie bereits stdout
zu der Datei umgeleitet haben, stderr
wird auch dort landen.