Warum verbirgt SFTP das Protokoll vor der Standardausgabe?

Warum verbirgt SFTP das Protokoll vor der Standardausgabe?

Ich habe ein Skript a.shmit einem sftpBefehl:

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 sftpangezeigt. Wenn ich es jedoch in einer Crontab einstelle und die Standardausgabe mit in eine Datei umleite >, wird nur die Ausgabe der beiden echoAnweisungen angezeigt. Wie kann ich das Protokoll aus dem sftpBefehl 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 stderrauch 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>&1am Ende. Es bedeutet: „Leiten Sie Dateideskriptor 2, stderr, zu Dateideskriptor 1, stdout, um.“ Da Sie bereits stdoutzu der Datei umgeleitet haben, stderrwird auch dort landen.

verwandte Informationen