
스크립트를 통해 시작하면 내 프로세스가 작동하지 않지만 직접 시작하면 제대로 작동하는 이유를 알아내려고 합니다.
자세한 내용은 다음과 같습니다.
스크립트는 resque 작업자 시작 스크립트입니다. 스크립트 위치는 /etc/monit/conf.d/start_resque.sh입니다. 권한은 755이고 ubuntu:ubuntu가 소유합니다.
스크립트를 실행하면 로그 출력에 pid가 표시되고 "시작 작업자 ip-xx-xxx-xxx-xx:26732(또는 pid가 무엇이든)"라고 표시됩니다. 그러나 ps aux | grep 26732, 아무것도 실행 중인 것으로 표시되지 않습니다. Rails 프로젝트 디렉토리에서 동일한 명령을 직접 실행하면 동일한 "작업자 시작" 출력이 표시되고 프로세스가 실제로 시작되어 계속 실행됩니다. 한 가지 주목할 점은 직접 시작하면 "nohup: ignoring input"이라는 추가 출력이 표시된다는 것입니다.
누군가가 도움을 줄 수 있는 또 다른 질문은 BACKGROUND=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으로 전환했는데 "작동합니다". resque 및 배포 작업으로 많은 시간을 낭비했지만 약간의 XP를 얻었고 시스템 관리자 기술이 거의 레벨업되었습니다. Sidekiq이 더 나은 옵션인 것 같습니다. 스레드를 활용하고 훌륭한 위키, 업데이트된 웹 인터페이스, 프로 옵션 및 홈페이지에 정말 멋진 닌자 아이콘이 있습니다.