다시 시작하기 전에 X 초 동안 대기하도록 supervisord 관리 프로그램을 구성하려면 어떻게해야합니까? 처리). X 초 간격을 설정하여

한 번에 1 개의 RabbitMq 메시지를 처리하는 작업자 프로세스가 있습니다. 현재 작업자가 종료하자마자 감독자가 작업자를 다시 시작합니다 (다음 메시지 처리).

X 초 간격을 설정하여 감독자가 즉시 다시 시작하지 않지만 다른 작업자를 시작하기 전에 주어진 시간 동안 기다립니다.

이것이 가능한가? 어떻게?



답변

수퍼바이저 프로그램 섹션에 간격을 지정할 수있는 방법은 없지만 코드에 “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

supervisorctlurApp을 중지 할 때 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를 사용하거나 감독자를 다시 시작하여 작동 시키십시오.


답변