当我的 cronjob 运行时,如何将某些消息记录到日志文件中?

当我的 cronjob 运行时,如何将某些消息记录到日志文件中?

如果我的 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而不仅仅是冉 Cronjob XY

奖金:

演示如何在命令执行成功时打印“已成功运行”,如果未成功执行则打印“失败”。

答案1

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

... 应* * * * *替换为实际时间表。

如果您想将其变成“one-liner”以便直接在 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

... 应* * * * *替换为实际时间表。

答案2

如果第一个命令成功运行,您似乎想将消息回显到日志文件。在这种情况下,您可以使用双 & 符号&&代替管道|/opt/cpanel/ea-php73/root/usr/bin/php /home/company/example.de/bin/magento list 2>&1 && echo "Ran Cronjob XY" >> /home/company/example.de/var/log/test.cron.log

相关内容