linux程序崩溃自动重启

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux程序崩溃自动重启相关的知识,希望对你有一定的参考价值。

1、如果发生重启前下载应用程序软件或运行程序软件,则可能是程序软件引起的重启,将程序软件卸载再重新安装即可,如果故障依旧则说明系统有错误。

2、开机按F8进入安全模式后再退出,再进入正常模式。也可用系统自带的系统还原功能进行还原,如果重启故障排除,则是系统文件受损造成的重启。

3、检查主板,主板老化、电容失效或爆浆、主板与机箱背板发生短路等均可引发重启,可将主板从机箱取出检查或测试,接着检查CPU风扇散热片的底部硅胶是否变干,如果变干则将CPU风扇上的硅胶清理干净,然后重新涂上好的硅胶即可。接着检查CPU的风扇转动,及CPU的温度是否正常。
参考技术A 您好,程序崩溃之后自动重启的话,它一般是在对程序进行自动的修复。如果可以重启的话,应该就是可以修好的。 参考技术B 程序崩溃也自动重启的,这种情况下应该去进行,把它的系统重装一遍,这样的话就不会了。 参考技术C 程序如果崩溃的话自动重启之后还不行的话,你就直接关机,等待5分钟。 参考技术D 自动启动,我认为这个应该可以自动重启,这应该有可能是因为输了数据太多了,造成他了一些紊乱,所以这个事儿等他进行一些恢复

使用 Supervisor 管理进程

1、介绍

Supervisor是一个客户端/服务器系统,允许用户在类UNIX操作系统上控制大量进程。 作用:为每个实例编写启动脚本通常是不方便的。 编写和维护会很痛苦。此外,脚本不能自动重启崩溃的进程,并且很多程序在崩溃时不能自行正常重启。Supervisord作为其子进程启动进程,并且可以配置为在崩溃时自动重启进程。它也可以自动配置为在自己的调用中启动进程。

2、安装 Supervisor

yum  install supervisor -y
更多安装方法详见官方手册:http://www.supervisord.org/installing.html

3、配置文件详解

Supervisor配置文件通常为 supervisord.conf。它由supervisord和supervisorctl使用。如果任一应用程序在没有-c选项指定配置文件的情况下启动,应用程序将按照指定的顺序在以下位置查找名为supervisord.conf的文件。它将使用它找到的第一个文件。
$ CWD / supervisord.conf
$ CWD的/ etc / supervisord.conf
/etc/supervisord.conf
/etc/supervisor/supervisord.conf
[unix_http_server]
file  =  /tmp/supervisor.sock
# 修改sock文件用户和属组,默认0700
chmod  =  0777
# 修改sock文件用户和属组,默认为启动supervisord的用户和组
chown =  sup:sup 
# web页面验证所需的用户名。
username  =  admin
password  =  123 

# 开启在web界面配置管理
[inet_http_server]
# web界面的访问地址与端口。
port = 10.0.0.12:9001
# 监听本机所有网卡地址
# port = *:9001
# port =     :9001
# 默认不需要用户名
user = admin
# 默认不需要密码,密码为明文保存在配置文件中
password = 123

# supervisor服务参数配置
[supervisord]
# 日志文件路径,默认/var/log/supervisor/supervisord.log
logfile = /var/log/supervisord.log
# 日志切割大小,默认50M
logfile_maxbytes = 1KB
# 切割的日志保留份数,默认10
logfile_backups = 3
# 日志级别,默认info。critical, error, warn, info, debug, trace, blather
loglevel = debug
# pid文件,默认/run/supervisord.pid
pidfile = /var/run/sup/sup.log 
# 是否后台开启,默认false,true为前台开启
nodaemon = false
# 当supervisord守护进程时,切换到此目录。
directory = /app

# 程序部分
# 必须包含一个或多个程序部分,以便supervisord知道应该启动和控制哪些程序。标题值是复合值。program ":" program_name
[program:redis-6661]
# 该程序启动时将运行的命令。可以是绝对路径
command = /app/redis/bin/redis-cli /app/redis/conf/redis-6661.conf
# 程序名称
process_name = redis-6661
# 是否自动启动,默认是
autostart = true
autorestart = true
# 与autorestart同用,如果进程没在root用户停止或意外,其余状态重启program 
exitcodes = 0,2


更多参数详见官网手册:http://www.supervisord.org/configuration.html

4、使用supervisord管理redis集群

1、准备环境

6台redis
[[email protected] conf]# ll
total 336
-rw-r--r--. 1 root root 46723 Apr 25 20:23 redis
-rw-r--r--. 1 root root 46725 Apr 25 21:01 redis-6661.conf
-rw-r--r--. 1 root root 46725 Apr 25 21:01 redis-6662.conf
-rw-r--r--. 1 root root 46725 Apr 25 21:01 redis-6663.conf
-rw-r--r--. 1 root root 46725 Apr 25 21:01 redis-6664.conf
-rw-r--r--. 1 root root 46725 Apr 25 21:01 redis-6665.conf
-rw-r--r--. 1 root root 46725 Apr 25 21:02 redis-6666.conf

创建supervisord配置文件

[inet_http_server]  
port=:19001
username=admin 
password=1

[supervisorctl]
;serverurl=unix:///tmp/supervisor.sock	
serverurl=127.0.0.1:19001					
username=super											
password=1											
;prompt=mysupervisor										
;history_file=~/.sc_hist

[program:redis-6661]
directory=/app/redis
command=/app/redis/bin/redis-server redis-6661.conf
autostart=true
autorestart=unexpected
exitcodes=0,2

[program:redis-6662]
directory=/app/redis
command=/app/redis/bin/redis-server redis-6662.conf
autostart=true
autorestart=unexpected
exitcodes=0,2

[program:redis-6663]
directory=/app/redis
command=/app/redis/bin/redis-server redis-6663.conf
autostart=true
autorestart=unexpected
exitcodes=0,2

[program:redis-6664]
directory=/app/redis
command=/app/redis/bin/redis-server redis-6664.conf
autostart=true
autorestart=unexpected
exitcodes=0,2

[program:redis-6665]
directory=/app/redis
command=/app/redis/bin/redis-server redis-6665.conf
autostart=true
autorestart=unexpected
exitcodes=0,2

[program:redis-66646
directory=/app/redis
command=/app/redis/bin/redis-server redis-6666.conf
autostart=true
autorestart=unexpected
exitcodes=0,2

以上是关于linux程序崩溃自动重启的主要内容,如果未能解决你的问题,请参考以下文章

崩溃时自动重启 android mono 应用程序

android-在崩溃或退出时远程重启应用程序

pm2 重启策略(restart strategies)

C/C++ 如何监控多个进程,实现崩溃自动重启?

我的程序崩溃时如何自动生成堆栈跟踪

android 中处理崩溃异常并重启程序