Cron

當我的 cronjob 執行時,如何將某些消息記錄到日誌文件中?

  • June 18, 2020

如果我的 cronjob 執行,我會嘗試將消息“Ran Cronjob XY”寫入日誌文件。

試圖:

/opt/cpanel/ea-php73/root/usr/bin/php /home/company/example.de/bin/magento list 2>&1 | grep -v "Ran Cronjob XY" >> /home/company/example.de/var/log/test.cron.log

但這失敗並記錄命令的輸出,/opt/cpanel/ea-php73/root/usr/bin/php /home/company/example.de/bin/magento list而不僅僅是Ran Cronjob XY

獎金:

如果命令執行成功,則顯示如何列印“執行成功”,否則如何列印“失敗”。

if some_command >/dev/null 2>&1; then
   echo ran successfully
else
   echo failed
fi >>logfile

上面的程式碼將執行命令some_command,丟棄其輸出,然後如果命令成功完成,則將文本附加ran successfully到文件中。logfile如果命令失敗,它會將文本附加failedlogfile.

在您的情況下,為簡單起見(因為您的命令中有很長的路徑名),我會將其放在它自己的包裝腳本中,並使用 cron 作業執行該腳本。

腳本看起來像

#!/bin/sh

PATH=/opt/cpanel/ea-php73/root/usr/bin:$PATH

logfile=/home/company/example.de/var/log/test.cron.log

if php /home/company/example.de/bin/magento list >/dev/null 2>&1
then
   echo ran successfully
else
   echo failed
fi >>"$logfile"

PATH在腳本中修改以允許在php沒有絕對路徑的情況下執行。

然後將安排該腳本:

* * * * * /path/to/thescript.sh

* * * * *應該由實際時間表替換。

如果您想將其變成“單行”以直接在 crontab 條目中使用:

* * * * * if /opt/cpanel/ea-php73/root/usr/bin/php /home/company/example.de/bin/magento list >/dev/null 2>&1; then echo ran successfully; else echo failed; fi >>/home/company/example.de/var/log/test.cron.log

* * * * *應該由實際時間表替換。

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