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 worker
celerycam
grep
$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というファイルを含めることができます)。