두 개의 프로세스를 주기적으로 확인/시작하기 위해 몇 가지 명령을 연결하려고 합니다 cron
(공유 호스팅을 사용하고 있어 변경할 수 없습니다). 많은 인터넷 검색 후에 내가 한 일은 아무것도 없었습니다.
두 개의 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과 반대). 내가 본 또 다른 문제는 거대한 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
실행 가능한 대안으로 추가했습니다.
또는 다른 두 명령을 사용하여 실행 중인 프로세스의 프로세스 ID를 가져올 pidof
수 있습니다. pgrep
이 경우(사용자 이름이 fred인 경우) 명령을 ps
다음으로 바꿀 수 있다고 생각합니다.
pgrep -fu fred celeryd
비슷한 결과를 얻으려면.
편집 2:쉘 글로빙을 중지하려면 '[c]elery' 주위에 작은따옴표를 추가하십시오(cron이 실행되는 디렉토리(사용자 $HOME)에는 celery.txt라는 파일이 포함될 수 있음).