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

Bla*_*ack 0 cron

如果我的 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
Run Code Online (Sandbox Code Playgroud)

但这失败并记录命令的输出,/opt/cpanel/ea-php73/root/usr/bin/php /home/company/example.de/bin/magento list而不仅仅是Ran Cronjob XY

奖金:

如果命令执行成功,则显示如何打印“成功运行”,否则打印“失败”。

Kus*_*nda 7

if some_command >/dev/null 2>&1; then
    echo ran successfully
else
    echo failed
fi >>logfile
Run Code Online (Sandbox Code Playgroud)

上面的代码将运行命令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"
Run Code Online (Sandbox Code Playgroud)

PATH在脚本中修改以允许在php没有绝对路径的情况下运行。

然后将安排该脚本:

* * * * * /path/to/thescript.sh
Run Code Online (Sandbox Code Playgroud)

...* * * * *应由实际时间表替换的地方。

如果您想将其变成“单行”以直接在 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
Run Code Online (Sandbox Code Playgroud)

...* * * * *应由实际时间表替换的地方。