supervisor监控进程
- 安装
sudo apt-get install supervisor
- 创建socket文件
sudo touch var/run/supervisor.sock
配置文件
; 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/supervisor/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[program:test_deploy] ;program目录 directory = /home/lhy/go/src/tmp/ ;启动进程命令 command= /home/lhy/go/src/tmp/test_deploy startsecs=5 startretries=3
测试程序(被监控进程)
package main import("time""log""os" ) func main(){//定时触发d:=time.After(2*time.Second)file:="deploy.log"logfile,err:=os.Create(file)defer logfile.Close()if err!=nil{return}debug:=log.New(logfile,"[DEBUG]",log.LstdFlags)for{//记录到deploy.log文件中select{case <-d:log.Println(time.Now())debug.Println(time.Now())d=time.After(2*time.Second)}} }
参考
- Ubuntu/Debian下Supervisor安装与配置
- supervisor安装和自启动的一些问题