a.sh
次のコマンドを含むスクリプトがありますsftp
。
echo "Starting to sftp..."
sftp [email protected] << END_SCRIPT
ls
mput *.csv.gz
bye
END_SCRIPT
echo "Sftp successfully."
sftp
対話的に実行すると、ログ出力が表示されます。ただし、crontabで設定してstdoutをfileにリダイレクトすると、2つの文に対してのみ出力され>
ます。コマンドからログを取得するecho
には?sftp
編集する:
次の形式を試しましたが、機能しません。
sftp -bバッチファイル.txt[Eメール保護](クローンからリダイレクト)
sftp -bバッチファイル.txt[Eメール保護]>> some_file.log(cronからのリダイレクト+この行からのリダイレクト)
私は問題がマニュアルページに記載されているようにインタラクティブに実行されるべきsftpの性質に関連する必要があると思います。しかし、解決策が見つかりません。
マイディストリビューション:Red Hat Enterprise Linux AS release 3 (Taroon Update 2)
クローンタブ項目:
52 14 * * * sh /home/xxx/testing/xxx.sh > /home/xxx/testing/xxx_`date +\%Y\%m\%d`.log
ログが生成された時間はcrontabエントリと一致します。
SSHバージョン:
OpenSSH_3.6.1p2, SSH protocols 1.5/2.0, OpenSSL 0x0090701f
編集する:
スクリプトファイルのsftp出力をテキストファイルにリダイレクトすると、sftpのメッセージが記録されることがわかりました。次にログファイルを削除し、cronを使用してスケジュールします。 cronの実行後にログファイルが生成されますが、sftpにはメッセージはありません。代わりに、スクリプトファイル内の他のステートメントログのみを含めます。
スクリプトファイルからsftpの出力をリダイレクトして対話式に実行すると、ログは完全に正常です。ただし、cronを使用して予約すると(crontabエントリにリダイレクトがなく、予約のみ可能)、sftpのログも消えます。
ベストアンサー1
表面的には出力リダイレクトはい発生していますが、それも含めたい場合がありますstderr
。 crontabでこれを試してください:
52 14 * * * sh /home/xxx/testing/xxx.sh > /home/xxx/testing/xxx_`date +\%Y\%m\%d`.log 2>&1
2>&1
最後に注意してください。意味は次のとおりです。 「stderr
ファイルディスクリプタ2をstdout
ファイルディスクリプタ1の場所にリダイレクトします。」すでにstdout
そのファイルにリダイレクトしているので、stderr
最終的にそのファイルに移動します。