このようなcronジョブには2つのコマンドがあります。
mysql -xxxxxx -pyyyyyyyyyyv -hlocalhost -e "call MyFunction1";wget -N http://mywebsite.net/path/AfterMyFunction1.php
しかし、私にはそれらの両方が同時に実行されているようです。
最初のコマンドを実行し、完了したら2番目のコマンドを実行するにはどうすればよいですか?
また、AfterMyFunction1.phpには、wgetを使用したときに実行されないjavascript http要求があります。 webbrowserでAfterMyFunction1.phpを開いた場合に機能します。
最初のコマンドを最初に完了する必要がある場合は、シェルで行う場合と同様に &&演算子 で区切る必要があります。最初が失敗した場合、2番目は実行されません。
GNU sem
。の一部であるparallel
を使用できます。
0 0 * * * root sem --jobs 1 --id MyQueue mysql -xxxxxx -pyyyyyyyyyyv -hlocalhost -e "call MyFunction1"
1 0 * * * root sem --jobs 1 --id MyQueue wget -N http://mywebsite.net/path/AfterMyFunction1.php
このcron構成は、最初にmysql
からsem
を開始し、MyQueue
と呼ばれる種類のキューに入れます。このキューはおそらく空なので、mysql
がすぐに実行されます。 1分後、cronは別のsem
を開始し、wget
を同じキューに入れます。 --jobs 1
を使用すると、sem
は特定のキューで一度に1つのジョブのみを実行するように指示されます。 mysql
が終了するとすぐに、2番目のsem
がwget
コマンドを実行します。 sem
には、キューイング動作を制御する多くのオプションがあります。たとえば、--semaphoretimeout -60
を追加すると、待機中のジョブは60秒後に単純に終了します。
最初のコマンドが失敗したときに2番目のコマンドを実行しないため、&&
ソリューションの方がおそらく優れています。 sem
ソリューションには、異なるユーザーのように異なるcron設定を指定できるという利点があります。また、cron間隔がジョブの継続時間より短い場合、cronジョブの重複を防ぎます。