스크립트를 사용하여 Resque 작업자를 시작하면 작동하지 않고 수동으로 시작하면 작동합니다.

스크립트를 사용하여 Resque 작업자를 시작하면 작동하지 않고 수동으로 시작하면 작동합니다.

내 프로세스가 스크립트를 통해 시작하면 작동하지 않지만 수동으로 시작하면 제대로 작동하는 이유를 알아내려고 합니다.

세부사항은 다음과 같습니다:

script는 resque 작업 시작 스크립트입니다. 스크립트 위치는 /etc/monit/conf.d/start_resque.sh입니다. 권한은 755이며 우분투 소유: ubuntu

스크립트를 실행하면 로그 출력에 pid가 표시되고 "작업자 ip-xx-xxx-xxx-xx:26732(또는 모든 pid) 시작 중"이라고 표시되지만 ps aux | grep 26732에서는 아무것도 표시되지 않습니다. . Rails 프로젝트 디렉터리에서 동일한 명령을 수동으로 실행하면 동일한 "작업자 시작" 출력이 표시되고 프로세스가 실제로 시작되어 계속 실행됩니다. 한 가지 주목할 점은 수동으로 실행하면 "nohup: 무시된 입력"이라는 추가 출력이 표시된다는 것입니다.

누군가 도움을 줄 수 있는 또 다른 질문은 Behind=yes가 실제로 내 작업자를 보호하지 않는 이유입니다. 그래서 nohup을 사용했는데 제대로 작동하는 것 같습니다.

내 스크립트는 다음과 같습니다(cd 후에 수동으로 실행한 명령).

#!/bin/bash
echo "starting worker.."
workercount="$(ps aux | grep -c resque)"
currentdir="/var/www/apps/myapp/current"
logdir=$currentdir/log/resque_worker.log
pidfile=$currentdir/tmp/pids/resque_worker_$workercount.pid
cd $currentdir
nohup bundle exec rake environment resque:work RAILS_ENV=production QUEUE='*' VERBOSE=1 PIDFILE=$pidfile >> $logdir 2>&1 &
echo "started worker $workercount! view log at $logdir. view pidfile at $pidfile"

ssh추가 참고 사항: Ubuntu 12.04에서 스크립트 및 수동 명령을 실행할 때 연결됩니다.

답변1

글쎄요, 저는 Sidekiq으로 전환했는데 "그냥 작동합니다". 다시 요청하고 배포하는 데 많은 시간이 낭비되었지만 경험을 쌓고 시스템 관리 기술이 상당히 향상되었습니다. Sidekiq이 더 나은 선택인 것 같습니다. 스레드를 활용하고 훌륭한 위키, 업데이트된 웹 인터페이스, 전문적인 옵션, 홈페이지에 아주 멋진 닌자 아이콘이 있습니다.

관련 정보