Shell

記錄整個 && 命令鏈的錯誤(在 Cron 作業中)

  • October 29, 2022

在我的一個 cronjobs 中,我有一個長&&鏈命令,在它的最後,我放了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-但是,問題仍然存在,因為我希望將來記錄任何此類和所有錯誤。)

我該如何解決這個問題,以便如果其中一個&&命令塊失敗,那麼它將被記錄為錯誤raytheon_log_error.txt,包括具體原因?

您可以將鏈包裝在子 shell 或命令組中,並重定向錯誤流:

(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

或者(也許是為了更好的可讀性)您可以將命令移動到腳本中。

引用自:https://unix.stackexchange.com/questions/722918