cronで2つのセロリプロセスを開始

cronで2つのセロリプロセスを開始

2つのプロセスを定期的に確認/開始するためにいくつかのコマンドを接続しようとしていますcron(共有ホスティングを使用しているため変更できません)。多くのインターネット検索の後、私がしたことは何もありませんでした。

2つのcronジョブカスケードで個別に起動しようとすると、サーバーがハングします(おそらくコマンドがパラメータであるgrepため、クエリをキャプチャできないためです。わかりません)。

ps -fu $USER | grep celeryd >/dev/null || $HOME/python27/bin/python $HOME/utilities/manage.py celeryd -E -B --concurrency=1
ps -fu $USER | grep celerycam >/dev/null || $HOME/python27/bin/python $HOME/utilities/manage.py celerycam

cronこれらの他のバリエーションでは、同じプロセスでプロセスを一緒に開始し、最初のプロセスのみを開始しようとしました。

ps -u $USER | grep python >/dev/null || $HOME/python27/bin/python $HOME/utilities/manage.py celeryd -E -B --concurrency=1 & $HOME/python27/bin/python $HOME/utilities/manage.py celerycam &

ps -u $USER | grep python >/dev/null || ( $HOME/python27/bin/python $HOME/utilities/manage.py celeryd -E -B --concurrency=1 & $HOME/python27/bin/python $HOME/utilities/manage.py celerycam; )

ps -u $USER | grep python >/dev/null || ( $HOME/python27/bin/python $HOME/utilities/manage.py celeryd -E -B --concurrency=1; ) sleep 30s; ( $HOME/python27/bin/python $HOME/utilities/manage.py celerycam; )

私はgrepの使用を放棄します。--pidfileオプションを活用しました。複数のインスタンスは許可されないため、確認する必要はありません。celery workercelerycamgrep

$HOME/python27/bin/python $HOME/utilities/manage.py celery worker -E -B --concurrency=1 --pidfile=worker.pid
$HOME/python27/bin/python $HOME/utilities/manage.py celerycam

答え1

$USERほとんどのcronには設定はありません。幸いps -u、ユーザー名がない場合、デフォルトは現在のユーザー(つまり、cronを実行しているユーザー)です。しかし、あなたのgrepはgrepと一致する可能性がかなり高いです。それ自体そしてセロリ加工。あなたは狡猾に行動することによってこの問題を解決することができますgrep '[c]elery'。これは、名前/パラメータにセロリだけが含まれているプロセスと一致します(パラメータ[c]eleryを含むgrepとは反対)。私が見たもう1つの問題は、巨大なManagement.pyパスでプログラムを実行しているため、出力の「セロリ」部分が失われる可能性があることですps。このフラグを使用してpsの出力に詳細を追加すると、この問題を解決できます-w(詳細が多いほど冗長になります)。したがって、提案された修正は次のとおりです。

ps fwwwu | grep '[c]eleryd' >/dev/null || $HOME/python27/bin/python $HOME/utilities/manage.py celeryd -E -B --concurrency=1
ps fwwwu  | grep '[c]elerycam' >/dev/null || $HOME/python27/bin/python $HOME/utilities/manage.py celerycam

編集する:上記のpsパラメータから不要なダッシュを削除し、pgrep実行可能な代替として追加しました。

あるいは、他の2つのコマンドを使用して、実行中のプロセスのプロセスIDを取得することもpidofできます。pgrepこの場合(ユーザー名がfredの場合)、コマンドをps次のように変更できると思います。

pgrep -fu fred celeryd

同様の結果を得るために。

編集2:シェルのグロービングを停止するには、 '[c]elery'の周りに一重引用符を追加します(cronが実行されているディレクトリ(ユーザー$ HOME)にはcelery.txtというファイルを含めることができます)。

関連情報