전체 && 명령 체인에 대한 오류 로깅(Cron 작업에서)

전체 && 명령 체인에 대한 오류 로깅(Cron 작업에서)

내 cronjob 중 하나에는 긴 &&명령 체인이 있고 그 끝에는 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

답변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

또는 (아마도 더 나은 가독성을 위해) 명령을 스크립트로 이동할 수 있습니다.

관련 정보