如果我的 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
如果命令失败,它会将文本附加failed
到logfile
.
在您的情况下,为了简单起见(因为您的命令中有很长的路径名),我会将其放入其自己的包装脚本中并执行那带有 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