외부 쉘 명령을 실행하는 작업 내에서 일부 처리를하고 있습니다. 이 명령은 완료하는 데 몇 시간이 걸리는 스크립트를 실행 중입니다.sidekiq에 의해 생성 된 프로세스는 sidekiq이 멈 추면 중지됩니다.
spawn 및 detach을 사용하여 스크립트를 시작한 후 kill -15 신호를 사용하여 sidekiq 작업을 종료하면 스크립트가 실행을 중지합니다. 이 동작은 spawn
명령이 sidekiq에 의해 시작된 경우에만 발생합니다. irb에서 콘솔을 닫은 경우가 아닙니다. 그래서 어떻게 든 그것은 여전히 보이는 sidekiq에 묶여 있습니다 -하지만 그것을 피하는 이유와 방법?.
test.sh
#!/bin/bash
for a in `seq 1000` ; do
echo "$a "
sleep 1
done
spawn_test_job.rb
module WorkerJobs
class SpawnTestJob < CountrySpecificWorker
sidekiq_options :queue => :my_jobs, :retry => false
def perform version
logfile = "/home/deployer/test_#{version}.log"
pid = spawn(
"cd /home/deployer &&
./test.sh
",
[:out, :err] => logfile
)
Process.detach(pid)
end
end
end
나는 일 WorkerJobs::SpawnTestJob.perform_async(1)
을 대기열에 내가 꼬리가 test_1.log
가 내 카운터가 계속 볼 수 있다면. 그러나 sidekiq에게 -15를 보내면 카운터가 멈추고 스크립트 pid가 사라집니다.
나는 [이 답변] (https://stackoverflow.com/a/31572431/3784008) 화재와 루비에서 자식 프로세스를 잊을 수있는 가장 적절한 방법을 결정하는 시점의 흐름도 다음 좋습니다. – anothermh
헤이 @anothermh, 꽤 멋진 다이어그램. 공유해 주셔서 감사합니다. 나는 그것에 따라 프로세스를 산란하지만 작동하지 않습니다. – radubogdan