Skip to content

Linux 开启启动

一下两种方式:

  1. supervisor
  2. local.rc
  3. 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

系统服务