메일이 들어오면 자동으로 '부재중'답장을 보내는 php를 만들었다. 명령줄에서 구동하는 방식이며 redis queue를 사용한다. 그런데 실제로 답장을 보내려면 php로 queue를 직접 실행해줘야 해서 들어오는 메일을 (거의)실시간으로 listen 하기에 곤란하다... 우분투에서 screen 명령어가 사용된 쉘스크립트를 만들고 cron에 등록해두면 되지만 그보다 좀 로그까지 잘 남겨주는 간편한 방법을 써보기로 했다.
일단 supervisor를 설치.
sudo apt-get install supervisor
설치후 /etc/supervisor의 설정파일 열기
sudo nano /etc/supervisor/supervisord.conf
설정파일에서 unix_http_server는 안쓸거라서 그 내용만 모두 주석처리 (해당 부분 라인마다 맨 앞에 ; 써넣기)
; supervisor config file
;[unix_http_server]
;file=/var/run/supervisor.sock ; (the path to the socket file)
;chmod=0700 ; sockef file mode (default 0700)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
; The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.
[include]
files = /etc/supervisor/conf.d/*.conf
supervisord 기본설정은 끝. /etc/supervisor 밑에 보면 conf.d 디렉토리가 있다. 여기에다 따로 띄워두고 싶은 실행파일을 동작시킬 방법을 정의하는 설정파일을 넣어두면 supervisor가 실행되면서 같이 띄워준다. 난 내가 만든 php를 돌려야 하니까 새로 설정파일을 만들기로 한다
sudo nano /etc/supervisor/conf.d/redis_queue_mailer.conf
nano 에디터 화면에서 다음과 같이 설정파일 내용을 작성
[program:redis_queue_mailer] // 서비스 이름
command=php /www/myhome/redis_queue_mailer queue:work // 실행할 파일이 있는 경로,파일명,옵션 등
directory=/www/myhome //실행위치
autostart=true //자동시작
autorestart=true //자동재시작
user=www-data //서비스를 구동할 유저
stdout_logfile=/www/myhome/log/redis_queue_mailer.log //로그 저장 위치
supervisor 재시작
sudo systemctl restart supervisor
내가 만든 서비스가 잘 실행중인지 확인
sudo systemctl status supervisor
이걸 하면 밑에 supervisor가 재시작될때의 log가 표시되는데 거기에
INFO spawned: 'redis_queue_mailer' with pid 11209
INFO success: redis_queue_mailer entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
이런식으로 내가 만든 서비스의 pid를 볼 수 있다. 그럼 설정 끝.