完全な&&コマンドチェーンのエラーロギング(Cronジョブで)

完全な&&コマンドチェーンのエラーロギング(Cronジョブで)

私のcronjobの1つに長い&&コマンドチェーンがあり、最後に2>>/home/myparadise/public_html/wp-content/uploads/import/files/raytheon/raytheon_log_error.txtエラーがある場合はそのファイルに移動するように入力しました。raytheon_log_error.txt

cd /home/myparadise/public_html/wp-content/uploads/import/files/raytheon && wget "https://www.raytheonsystems.com/test" -O raytheon_direct.zip && unzip -q raytheon_direct.zip && rm -f raytheon_direct.zip && csvjoin --left -c "MANUFACTURER SKU,MPN" $(ls -Art ASH* | tail -n 1) /home/myparadise/public_html/wp-content/uploads/import/files/raytheon/raytheon2_multi_images_only.csv > raytheon_new_joined.csv && wget -q -O - "https://www.myparadise.com.au/wp-load.php?import_key=XXXX&import_id=111&action=trigger" 2>>/home/myparadise/public_html/wp-content/uploads/import/files/raytheon/raytheon_log_error.txt

ただし、このファイルに対してエラーは発生しません。これで、予想されるエラーが何であるかを100%確信することはできませんが、最後のコマンドが実行されなかったため、理由があります。途中で失敗しました。 (編集:その後、エラーが権限に関連していることがわかりました。raytheon_direct.zip: Permission denied- しかし、将来、これらのエラーとすべてのエラーを記録したいので、問題は残ります。)

コマンドブロックの1つが失敗した場合に特定の理由で&&エラーとして記録されるようにこの問題を解決するにはどうすればよいですか?raytheon_log_error.txt

ベストアンサー1

サブシェルまたはコマンドグループからチェーンをラップし、対応するエラーストリームをリダイレクトできます。

(cmd1 && cmd2 && cmd3) 2>>/path/to/errorfile

または

{ cmd1 && cmd2 && cmd3; } 2>>/path/to/errorfile

例えば

$ crontab -l | tail -1
* * * * * { date && touch /root/file && date; } 2>> ~/cron.log

$ tail cron.log
touch: cannot touch '/root/file': Permission denied
touch: cannot touch '/root/file': Permission denied
touch: cannot touch '/root/file': Permission denied

あるいは、(おそらくより読みやすくするために)コマンドをスクリプトに移動することもできます。

おすすめ記事