답변:
수퍼바이저 프로그램 섹션에 간격을 지정할 수있는 방법은 없지만 코드에 "sleep ()"을 넣어서 프로그램이 메시지 처리를 마친 후 지정된 시간 동안 기다릴 수 있습니다.
프로그램 코드를 원하지 않거나 변경하지 않으려면 다음과 같이 bash 스크립트로 줄 바꿈하십시오.
#!/bin/bash
/usr/local/bin/myprogram
sleep 30
그리고 프로그램 대신 해당 스크립트를 실행하도록 감독자 프로그램 섹션을 변경하십시오.
command=/usr/local/bin/myprogram.sh
cron이없는 도커 컨테이너 내부에서 명령을 실행하는 간단한 방법이 필요했습니다. 여기 내가 사용하는 것이 있습니다 :
[program:runevery]
directory = /my/workdir
command = sh -c "sleep 5;date >>/root/test.ts"
stdout_logfile = /var/log/supervisor/%(program_name)s.log
stderr_logfile = /var/log/supervisor/%(program_name)s.log
autorestart = true
startsecs = 0
exitcodes = 0,1,2
startsecs = 0은 수 초 후에 명령이 종료 되더라도 관리자가 명령이 성공적으로 시작된 것으로 생각하도록합니다. 그렇지 않으면 수퍼바이저가 다시 시작을 멈추고 루프에 있다고 생각합니다.
위의 예와 함께 /root/date.ts에 표시되는 내용은 다음과 같습니다.
# tail -f /root/test.ts
Tue Nov 17 20:42:58 UTC 2015
Tue Nov 17 20:43:04 UTC 2015
Tue Nov 17 20:43:10 UTC 2015
[...]
취향에 맞게 수면을 조정하고 'date >> / root / test.ts'를 원하는 것으로 바꾸십시오.
이 솔루션은 매분보다 cronjob을 더 자주 실행해야하는 경우에도 유용합니다.
[program:yourapp]
command = bash -c "sleep 60 && exec urcmd'
startsecs = 65 ;
그리고
supervisorctl -c your_config_file reload
1. 당신은 exec
명령 을 사용해야합니다 . 그렇지 않으면 하위 sleep 60 && exec your command
진행을 포크하고 진행 상황은 다음과 같습니다.
$ ps -ef|grep urcmd
work 1818 1698 0 17:35 ? 00:00:00 bash -c sleep 60 && urcmd
work 3872 1818 0 17:36 ? 00:00:00 urcmd
supervisorctl
urApp을 중지 할 때 1818 진행을 중지하고 3872를 고아 진행 상태로 둡니다.
2. 시작 시간을 절전 시간보다 5 초 이상으로 변경 한 다음이 앱을 시작하고 상태를 확인하면 시작 중임을 표시합니다.
$supervisorctl -c your_config_file status;echo;ps -ef|grep urcmd
urapp STARTING
otherapp RUNNING pid 13502, uptime 0:00:55
$supervisorctl -c your_config_file status;echo;ps -ef|grep urcmd
urapp RUNNING pid 13503, uptime 0:00:05
otherapp RUNNING pid 13502, uptime 0:00:65
그렇지 않으면 값을 sleep secs보다 작게 설정하면 앱을 시작하고 상태를 확인할 때 실행 상태가 표시되지만 실제 실행 전에 여전히 cmd를 대기 중입니다.
3. 구성 파일을 변경할 때 reload cmd를 사용하거나 감독자를 다시 시작하여 작동 시키십시오.