cron 없이 1분마다 스크립트를 실행하고 하위 프로세스를 허용합니다.

cron 없이 1분마다 스크립트를 실행하고 하위 프로세스를 허용합니다.

나는 2개의 PHP 스크립트를 작성했습니다. 하나는 작업자이고 다른 하나는 마스터입니다.

master를 수동으로 실행하면 Rabbitmq 시스템을 확인하고 감지한 각 대기열에 대해 1개의 작업자를 생성합니다. 그런 다음 master를 다시 실행하면 각 작업자 프로세스가 아직 실행 중인지 확인하고, 그렇다면 아무 작업도 수행하지 않고, 그렇지 않으면 다시 시작합니다.

나는 그것이 매우 간단한 개념이라고 생각한다. 나는 생성되는 각 하위 프로세스에 대해 마스터에서 nohup 및 &를 사용하여 이 작업을 수행합니다. 이제 60초마다 마스터를 실행하여 대기열이 살아 있는지 확인하고 그렇지 않으면 다시 생성할 것이라고 추측할 수 있을 것입니다.

이로 인해 문제가 발생합니다. cron 작업에서 nohub를 사용할 수 없으며 & 자체를 사용하는 것만으로는 작동하지 않는 것 같습니다. 내가 아는 한 직원은 전화조차 하지 않았다.

별도의 쉘 스크립트를 생성한 다음 master.php를 호출해 보았지만 작동하지 않았습니다. 나는 그것을 upstart 작업으로 생성하려고 시도한 후 ubuntu 17+에서 upstart가 제거되었다는 것을 기억했습니다.

나는 다른 접근 방식에 대한 어떤 제안에도 열려 있지만 어떤 경로를 택하든 내 master.php가 헤드리스 백그라운드 프로세스로 work.php 파일을 생성하도록 허용해야 합니다.

답변1

#!/bin/bash
#I am just like a system daemon... 
#I do not need nohup for work, and I should not be called from cron.

#My name is main_safe
#I will become a separeted process even if my father dies... 
#i will check if main is still alive, and if dies i will restart it
#nohup is not needed inside shell script. 
#IMPORTANT: to die is very different from to freeze 
main_safe(){
trap "" HUP
while sleep 120; do
   main&
   wait 
done

}

#My name is main I like to keep restarting php master.php
#everytime it go away... remove wait and I will keep starting master.php with absolutely no reason.
#If you are paranoid you can program me to restart main_safe,
#But what will happen if you try to stop me? Bad things.. so... 
#IMPORTANT: to die is very different from to freeze 
main(){
trap "" HUP
while sleep 60; do

     php master.php & 
     #do whatever you want here

     #uncomment this to prevent two instances of master.php from going up maybe it is necessary:
     wait

done
}


#nohup is not needed in shell script
main_safe& 
pstree -p | grep $! 

이것이 허용됩니까?

답변2

systemd를 사용하는 것은 어떻습니까? 나는 몇 가지 검색을 수행했으며 systemd가 upstart를 새 버전의 우분투로 교체함에 따라 이것이 유용할 수 있습니다. 아래 링크가 도움이 될 수 있습니다.

Digital Ocean: 충돌 또는 재부팅 후 Linux 서비스가 자동으로 시작되도록 구성하는 방법

관련 정보