怎样使程序开机自启动和程序挂掉自动重启(代码片段)

lishanlu136 lishanlu136     2023-04-01     761

关键词:

碰到这个问题基本都是属于服务端工程部署的事情,在部署好我们的算法服务后,怎么样保证当服务器关机重启后,我们的算法服务自动重新运行?如果碰到异常bug使得我们的程序挂掉后,怎样让它重新运行?
下面方法都是在服务器环境:Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-161-generic x86_64)得到验证

目录

法一,用crontab定时执行sh脚本

用crontab每分钟执行sh脚本,这个sh脚本用于查询我们的算法服务进程是否还在,如果不在,则重启程序,反之,则不做任何操作
run.sh脚本如下:

  #!/bin/bash
ps -ef|grep "service_app.py"|grep -v grep
if [ $? -ne 0 ]
then
	cd /home/lishanlu/code/openmv_city
	nohup /home/lishanlu/anaconda3/envs/py36/bin/python service_app.py &
else
    echo "service_app.py is runing ..."
fi

在crontab中添加每分钟执行一次run.sh脚本,关于crontab的参数细节可见我的另一篇博客linux常用命令
在终端输入crontab -e
在文档末尾添加:

* * * * * /bin/bash /home/lishanlu/code/openmv_city/run.sh

如果需要让程序单纯只是开机自启动的话,就在文档末尾添加:

@reboot /bin/bash /home/lishanlu/code/openmv_city/run.sh

注意:

  • 1、sh脚本中,如果运行程序需要用到虚拟环境,最好用绝对路径指定
  • 2、sh脚本中,程序的路径也用绝对路径
  • 3、用crontab执行sh脚本,如果py程序中需要访问一些系统命令,例如ifconfig,lsblk等,最好也在程序中用绝对路 径/sbin/ifconfig,/bin/lsblk,不然会存在找不到命令的情况。
  • 4、如果遇到启动不了,可以加入打印日志看看,* * * * * /bin/bash /home/lishanlu/code/openmv_city/run.sh >> /home/lishanlu/code/openmv_city/crontab_log.log

法二,用supervisor+gunicorn来启动我们的程序

参考:https://blog.csdn.net/guolindonggld/article/details/83386920
1、 安装gunicorn
gunicorn主要解决高并发的问题,安装:

pip install gunicorn

使用gunicorn启动flask web服务:

gunicorn -w 4 service_app:app

-w代表启动的进程数,service_app是我的python文件名,app是文件中的变量
2、安装supervisor
supervisor是一个进程管理系统,如果我们的进程异常中断,它可以帮我们重新启动
Ubuntu下安装方式如下:

sudo apt install supervisor

安装完成后,可以在/etc/supervisor目录下看到conf.d文件夹和一个supervisord.conf默认配置文件。我们可以打开看看这个supervisord.conf配置文件:

其中分号(;)后面是注释部分,最重要是文件最后两行

[include]
files = /etc/supervisor/conf.d/*.conf

说明,我们自己定义工程的supervisor配置文件可以直接放在conf.d文件夹下,并且要以*.conf的方式命名。

cd /etc/supervisor/conf.d
vim supervisor_openmv.conf

supervisor_openmv.conf配置文件的内容如下:

[program:openmv_server]  ; 程序名称,在supervisorctl中通过这个名称对程序进行一系列操作
user = lishanlu  ; 用哪个用户启动
process_name=%(program_name)s   ; 进程名字(默认写法)
numprocs=1   ; 开启的进程数量
directory = /home/lishanlu/code/openmv_city   ;程序的启动目录
command = /home/lishanlu/anaconda3/envs/py36/bin/gunicorn -w 4 service_app:app   ; 启动命令,与手动启动命令一致
autostart = true  ; 在supervisord启动的时候也自启动
startsecs = 20     ; 启动时间
autorestart = true  ; 程序异常退出的时候自动重启
startretries = 3    ; 启动失败自动重试次数,默认是3
redirect_stderr = true   ; 把stderr重定向到stdout,默认为False
stdout_logfile_maxbytes = 20MB   ; stdout 日志文件大小,默认为50M
stdout_logfile_backups = 10   ; stdout 日志文件备份数
stdout_logfile = logs/supervisor.log  ; stdout 日志文件,需手动先创建目录,不然无法正常启动

启动supervisor

sudo supervisord -c /etc/supervisor/supervisord.conf

然后用supervisorctl来操作守护的进程
supervisorctl常用命令:
1、重新启动配置中的所有程序 supervisorctl reload
2、启动某个进程 supervisorctl start your_program_name
3、查看正在守候的进程 supervisorctl status
4、停止某一进程 supervisorctl stop your_program_name
5、重启某一进程 supervisorctl restart your_program_name
6、停止全部进程 supervisorctl stop all

注意:

  • 1、 用supervisord管理进程时,gunicorn的daemon选项需要设置为False
  • 2、如果启动命令包含虚拟环境,需修改environment参数:
    environment=PATH=“/home/username/.virtualenvs/bin”
  • 3、如果报错“Error: .ini file does not include supervisord section”,这是由于在我们的配置文件中缺少两个固定模块造成的,需要在我们的配置文件中加上[supervisord]和[supervisorctl]

法三,将工程制作成docker镜像,通过运行容器时给定参数–restart always

用docker run启动容器时,带上参数–restart always
也可以使用–restart unless-stopped,这样如果不是显式的 docker container stop xxx 就会在这个容器主进程挂掉之后自动重启。

法四,将写好的脚本(.sh文件)放到目录 /etc/profile.d/ 下,系统启动后就会自动执行该目录下的所有shell脚本

怎样使程序开机自启动和程序挂掉自动重启(代码片段)

...运行?如果碰到异常bug使得我们的程序挂掉后,怎样让它重新运行?下面方法都是在服务器环境:Ubuntu18.04.5LTS(GNU/Linux4.15.0-161-genericx86_64)得到验证目录法一,用crontab定时执行sh脚本法二,用supervisor+gunico... 查看详情

linux,怎样让某个用户一开机就进入图形界面自动执行一个程序,程序退出就自动锁定或重启?

目的是不让这个用户进入到交互界面,只能执行固定的一个程序参考技术A1:你可以把自己的程序P加入到Linux开机自启动项里面.具体怎么加自己百度下Linux添加开机启动项,或者参考些具体的例子,比如linux下tomcat开机自启动;2:在你... 查看详情

电脑应用开机自启动怎么办

...重启电脑ghostxp系统,完成关闭开机自启动程序的操作。3.怎样关闭电脑里软件的自动启动加快电脑启动速度/z/q850650698一、BIOS的优化设置在BIOS设置的首页我们进入“AdvancedBIOSFeatures”选项,将光标移到“FristBootDevice”选项,按“P... 查看详情

supervisor进程管理&开机自启(代码片段)

...程。我用这个东西主要用来监测爬虫和Flask运行状况,当程序挂掉后,supervisor能够帮我重新拉起进程。安装安装就比较简单了,直接用Python的包管理器pip:sudopipinstallsupervisor配置先通过echo_super 查看详情

windowsbat启动程序和监控程序自启动(代码片段)

导读我们需要监控某个服务进程是否启动,如果服务奔溃了就自动重启,这里以redis为例介绍一下如何在windows上写这种bat文件,来监控服务的状态监控服务的运行状态脚本启动redisredis.bat文件的内容如下@echooffrem隐... 查看详情

linux开机自启应用&开机执行脚本&监听端口应用挂掉了执行启动脚本(代码片段)

Linux开机自启应用Linux开机执行脚本Linux监听端口应用挂掉了执行启动脚本linux开机自启背景目前要部署一个springboot框架的jar包,实现开机启动项目或者应用挂掉了执行启动脚本在root目录下有一个启动项目的脚本:app_start.shapp_star... 查看详情

干货|浅析程序开机自启动(代码片段)

关注「嵌入式大杂烩」,选择「星标公众号」一起进步!在《实用|如何远程登录开发板?》这篇文章中我们给开发板配置了网络,但是板子重启之后,又得手动输入命令去配置连接WiFi。在《实用|10分钟教你搭... 查看详情

ubuntu16.04怎么添加开机启动自动执行程序命令(代码片段)

...务器环境Ubuntu16.04问题描述:怎么添加开机启动执行程序命令,有些任务要手动输命令,每次重启麻烦解决方案:1.编辑rc.loacl脚本Ubuntu开机之后会执行/etc/rc.local文件中的脚本vi/etc/rc.local在exit0前面添加好脚本代码d... 查看详情

linux下将java程序安装为服务自启动(代码片段)

测试环境是centos7,其他版本请自测原理是安装为systemctl服务,可以实现开机自启动,异常关闭自动重启,可以省不少事情。下面直接上shell命令,复制保存为sh文件,修改最上面的变量,然后运行就可以了#!/bin/bashstartshell=\'/home/s... 查看详情

通过注册表实现开机自启动(代码片段)

...后,它都会在这个注册表键下遍历键值,以获取键值中的程序路径,并创建进程启动程序。所以,只需要在这个注册表键下添加想要设置自启动程序的路径就可以了。其中 查看详情

phpstudy开机自启(代码片段)

phpstudy每次开机就要重启一次,单单吧phpstudy面板加入自启动目录毫无意义,还是需要点击启动才能运行。所以考虑如何自启。其实主要就是apache和数据库都自动启动即可因此主要包含两部分第一部分apach的自启动进入到自己的php... 查看详情

windows程序设为开机自启动(代码片段)

在Windows文件管理器中输入%APPDATA%MicrosoftWindowsStartMenuProgramsStartup把程序快捷方式放到此处即可。 查看详情

petalinux添加开机自启动程序(代码片段)

使用petalinux建立开机自启动程序1、使用PetaLinuxtools$petalinux-create-tapps--templateinstall-nmyapp-init--enable2、编辑文件/project-spec/meta-user/recipes-apps/myapp-init/myapp-init.bb#thisfileisthemyapp-initrecipe.#SUM 查看详情

centos7如何设置开机自启动程序开机自启动脚本?(代码片段)

文章目录1、把启动程序的命令添加到`/etc/rc.d/rc.local`文件中CentOS7.9里的`/etc/rc.local`文件注意:`/etc/rc.d/rc.local`可能没有可执行权限,请检查并添加!!!注意:`/etc/rc.d/rc.loc 查看详情

centos7如何设置开机自启动程序开机自启动脚本?(代码片段)

文章目录1、把启动程序的命令添加到`/etc/rc.d/rc.local`文件中CentOS7.9里的`/etc/rc.local`文件注意:`/etc/rc.d/rc.local`可能没有可执行权限,请检查并添加!!!注意:`/etc/rc.d/rc.loc 查看详情

linux下将java程序安装为服务自启动(代码片段)

测试环境是centos7,其他版本请自测原理是安装为systemctl服务,可以实现开机自启动,异常关闭自动重启,可以省不少事情。下面直接上shell命令,复制保存为sh文件,修改最上面的变量,然后运行就可... 查看详情

linux笔记:开机自动运行程序(代码片段)

...意事项SysVinit和Systemd的联系与区别总结目的开机自动运行程序,或者说系统启动时自动运行程序,这是经常会需要用到的功能。在linux中实现随系统启动运行程序的功能通常有三种(或者说两种)方法。本篇文章... 查看详情

开机时电脑后台运行的程序太多,如何关闭不需要的程序?

开机时怎么关闭后台占用的cpu方法电脑开机自启动程序过多,必将影响电脑的开机速度和运行速度。关闭不需要的开机自启动程序的解决办法如下:一、利用系统配置实用程序关闭开机自启动程序。本方法适用于明确了解哪些程... 查看详情