CronジョブはPHPスクリプトが実行されていることを確認し、そうでない場合は実行されます。

CronジョブはPHPスクリプトが実行されていることを確認し、そうでない場合は実行されます。

誰かが私に正しい方向を伝えることができるかどうか疑問に思います。私はLinuxコマンドラインを使った経験がほとんどありません。最近の職場でのさまざまな要因のために、いくつかの知識を学ぶ必要があります。

デフォルトでは、php私のサーバーのディレクトリには2つのスクリプトがあります。アプリケーションの目的のために、これらのスクリプトは継続的に実行する必要があります。現在これが私が実装する方法です。

nohup sh -c 'while true; do php get_tweets.php; done' >/dev/null &

そして

nohup sh -c 'while true; do php parse_tweets.php; done' >/dev/null &

しかし、無限ループにもかかわらず、スクリプトが定期的に停止し、強制的に再起動する必要があることを発見しました。理由はわかりませんが、そうです。これにより、CRON実行中であることを確認し、そうでなければ実行/再起動するタスクの見通しについて考えることになりました。

誰かが私にこれを行う方法についての情報を与えることができますか?

ベストアンサー1

クローンの仕事の概念に最初に触れたので、Davidannの答えを拡張したいと思います。すべてのUNIXまたはLinuxシステムには、どこかにcrontabが格納されています。 crontabはプレーンテキストファイルです。以下を考慮してください。Gentoo Wikiのクローン)

#Mins  Hours  Days   Months  Day of the week
10     3      1      1       *       /bin/echo "I don't really like cron"
30     16     *      1,2     *       /bin/echo "I like cron a little"
*      *      *      1-12/2  *       /bin/echo "I really like cron"

このcrontabは隔月で毎日、毎時間、毎分毎に「I really like cron」をエコーし​​なければなりません。明らかに、cronが本当に好きな場合にのみこれを行います。 crontabはまた、1月と2月の毎日16:30に「I kind of cron」をエコーし​​ます。 1月1日3時10分には「私はクローンがあまり好きではありません」という回答も受けました。

cron 初心者としてアスタリスクの列をコメントアウトすることで、各列の機能を知ることができます。私が知っているすべてのCron実装はこの順番になっています。さて、Davidannの答えを私がコメントしたファイルとマージします。

#Mins  Hours  Days   Months  Day of week
  *     *      *      *       *   lockfile -r 0 /tmp/the.lock && php parse_tweets.php; rm -f /tmp/the.lock
 

各列に値が入力されていない場合、デフォルトは
毎時、毎時、毎月、-->1年を通して毎分です。

Davidannが述べたように、ロックファイルを使用すると、ファイルを「実行」するコマンドであるPHPインタプリタのコピーのみが実行され、行の最後のビットは次のphp parse_tweets.php実行のために準備されたロックファイルを削除します。私は毎分ファイルを削除するのが好きではありませんが、それが必要な動作であれば、これは非常に受け入れ可能です。ディスクに書き込んで書き換えるのは個人的な好みにすぎません。

おすすめ記事