誰かが私を正しい方向に向けてくれるのではないかと思います。 Linuxコマンドラインでの作業経験はほとんどありませんが、最近、さまざまな要因により、知識を習得する必要がありました。
基本的に私は2つのphp
を持っています サーバー上のディレクトリにあるスクリプト。アプリケーションの目的上、これらのスクリプトは継続的に実行されている必要があります。現在、私はそれを次のように実装しています:
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
の見通しを検討しました。 実行されているかどうかを確認し、実行されていない場合は実行/再起動するジョブ。
誰かがこれをどうやって行うかについての情報を私に提供することができますか?
承認された回答:
あなたはcronジョブの概念に慣れていないので、Davidannの答えを拡張したいと思います。すべてのUNIXまたはLinuxシステムには、どこかにcrontabが格納されています。 crontabはプレーンテキストファイルです。次のことを考慮してください:(CronのGentooWikiから)
#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は、隔月の毎日の
時間ごとに「Ireallylikecron」をエコーする必要があります。明らかに、あなたが本当にcronが好きなら、あなたはそれを
するでしょう。 crontabは、1月と2月の毎日16:30に「crona
little」もエコーします。また、1月1日の3:10に
「cronはあまり好きではありません」とエコーします。
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
* * * * * lockfile -r 0 /tmp/the.lock &&php get_tweets.php; rm -f /tmp/the.lock
各列に値を入力しない場合、デフォルトは次のようになります。
1週間中、毎月、毎日、毎時、毎分、–>一年中毎分。
Davidannがロックファイルを使用すると、phpインタープリターのコピーが1つだけ実行されるようになると述べているように、php parse_tweets.php
はファイルを「実行」するコマンドであり、行の最後のビットはロックファイルを削除して次の実行の準備をします。毎分ファイルを削除するのは好きではありませんが、これが必要な動作である場合、これは非常に受け入れられます。ディスクへの書き込みと書き換えは個人的な好みです