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) } } }
参考