Linux 开启启动
一下两种方式:
- supervisor
- local.rc
- systemctl
supervisor
安装:
shell
sudo apt install supervisor
sudo systemctl start supervisor
sudo systemctl enable supervisor
调整配置文件: /etc/supervisor/supervisorcrt.conf
增加 HTTP 管理服务:
ini
[inet_http_server]
port=*:9001
username=yhm
password=Gzxc@2578
#[include]
#files = /etc/supervisor/conf.d/*.conf
可以打开浏览器: http://localhost:9001
增加守护进程配置文件(conf.d/hydpy.conf):
ini
[program:lanclient]
command=/home/yhm/software/YOLO-Hydpy/hydpy.sh run
directory=/home/yhm/software/YOLO-Hydpy
user=yhm
numprocs=1
startsecs=30
autostart=true
autorestart=true
# startretries=3
stdout_logfile_maxbytes=64MB
stdout_logfile_backups=10
stdout_logfile=/var/log/supervisor/hydpy.out
stopasgroup=false
killasgroup=false
redirect_stderr=true
checkstart.conf
ini
[program:checkstart]
command=/home/yhm/software/ansible-scripts/check-and-start.sh
directory=/home/yhm/software/ansible-scripts
user=yhm
startsecs=30
autostart=true
autorestart=true
startretries=2
stdout_logfile_maxbytes=64MB
stdout_logfile_backups=10
stdout_logfile=/var/log/supervisor/checkstart.out
stopasgroup=false
killasgroup=false
redirect_stderr=true
日志文件含义
- [program:theprogramname] ; 定义一个守护进程 ,比如下面的elasticsearch
- command=/bin/cat ; 启动程序使用的命令,可以是绝对路径或者相对路径
- process_name=%(program_name)s ; 一个python字符串表达式,用来表示supervisor进程启动的这个的名称,默认值是%(program_name)s
- numprocs=1 ; Supervisor启动这个程序的多个实例,如果numprocs>1,则process_name的表达式必须包含%(process_num)s,默认是1
- directory=/tmp ; supervisord在生成子进程的时候会切换到该目录
- umask=022 ; umask for process (default None)
- priority=999 ; 权重,可以控制程序启动和关闭时的顺序,权重越低:越早启动,越晚关闭。默认值是999
- autostart=true ; 如果设置为true,当supervisord启动的时候,进程会自动启动
- autorestart=true ; 设置为随 supervisord 重启而重启,值可以是false、true、unexpected。false:进程不会自动重启
- startsecs=10 ; 程序启动后等待多长时间后才认为程序启动成功,默认是10秒
- startretries=3 ; supervisord尝试启动一个程序时尝试的次数。默认是3
- exitcodes=0,2 ; 一个预期的退出返回码,默认是0,2。
- stopsignal=QUIT ; 当收到stop请求的时候,发送信号给程序,默认是TERM信号,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2
- stopwaitsecs=10 ; 在操作系统给supervisord发送SIGCHILD信号时等待的时间
- user=chrism ; 如果supervisord以root运行,则会使用这个设置用户启动子程序
- redirect_stderr=true ; 如果设置为true,进程则会把标准错误输出到supervisord后台的标准输出文件描述符
- stdout_logfile=/a/path ; 把进程的标准输出写入文件中,如果stdout_logfile没有设置或者设置为AUTO,则supervisor会自动选择一个文件位置
- stdout_logfile_maxbytes=1MB ; 标准输出log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小
- stdout_logfile_backups=10 ; 标准输出日志轮转备份的数量,默认是10,如果设置为0,则不备份
- stdout_capture_maxbytes=1MB ; 当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB
- stdout_events_enabled=false ; 如果设置为true,当进程在写它的stderr
- stderr_logfile=/a/path ; 把进程的错误日志输出一个文件中,除非redirect_stderr参数被设置为true
- stderr_logfile_maxbytes=1MB ; 错误log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小
- stderr_logfile_backups=10 ; 错误日志轮转备份的数量,默认是10,如果设置为0,则不备份
- stderr_capture_maxbytes=1MB ; 当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB
- stderr_events_enabled=false ; 如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发
- environment=A=1,B=2 ; 一个k/v对的list列表
- serverurl=AUTO ; 是否允许子进程和内部的HTTP服务通讯,如果设置为AUTO,supervisor会自动的构造一个url
supervisor 管理
shell
supervisorctl status //查看所有进程的状态
supervisorctl stop es //停止es
supervisorctl start es //启动es
supervisorctl restart //重启es
supervisorctl update //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序
换成all可以管理配置中的所有进程。直接输入supervisorctl进入supervisorctl的shell交互界面,此时上面的命令不带supervisorctl可直接使用。
local.rc
启动后立即执行脚本:
shell
@reboot /home/yhm/software/ansible-scripts/check-and-start.sh
定时执行脚本:
shell
*/15 * * * * yhm /home/yhm/software/ansible-scripts/check-and-start.sh
Linux 原生自动启动
systemctl
系统服务