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 listCronjob XYを実行しました。

ボーナス:

コマンドが正常に実行された場合は「成功した実行」を印刷し、それ以外の場合は「失敗」を印刷する方法を示します。

答え1

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

上記のコードはコマンドを実行し、出力を削除し、コマンドが正常に完了するとファイルにsome_commandテキストを追加します。コマンドが失敗した場合、テキストは。ran successfullylogfilefailedlogfile

あなたの場合は、単純化のために(コマンドに長いパス名があるので)それを独自のラッパースクリプトに入れて実行します。それクローン操作を含むスクリプト。

スクリプトは次のとおりです。

#!/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エントリで直接使用するために「1行」に置き換えるには、次の手順を実行します。

* * * * * 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

関連情報