Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统.它可以很方便的监听、启动、停止、重启一个或多个进程.用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制.
不使用守护进程会出现的三个问题:
①.、ASP.NET Core应用程序运行在shell之中,如果关闭shell则会发现 ASP.NET Core程序被关闭,从而导致应用无法访问,这种情况当然是我们不想遇到的,而且生产环境对这种情况是零容忍的.
为了解决这些问题,我们需要有一个程序来监听 ASP.NET Core 应用程序的状况.并在应用程序停止运行的时候立即重新启动.
配置好yum源后,可以直接安装
yum install supervisor
Debian/Ubuntu可通过apt安装apt-get install supervisor
pip安装pip install supervisor
easy_install安装easy_install supervisor
①.、安装Python包管理工具(easy_install)
yum install python-setuptools
easy_install supervisor
a) 通过运行echo_supervisord_conf程序生成supervisor的初始化配置文件,如下所示:
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
然后查看路径下的supervisord.conf.在文件尾部添加如下配置.
...
;[include]
files = /etc/supervisord.d/*.ini
;conf.d 为配置表目录的文件夹,需要手动创建
[include] files = conf.d/*.conf
[program:MGToastServer] ;程序名称,终端控制时需要的标识
command=dotnet MGToastServer.dll ; 运行程序的命令
directory=/root/文档/toastServer/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
stderr_logfile=/var/log/MGToastServer.err.log ; 错误日志文件
stdout_logfile=/var/log/MGToastServer.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT
c) 运行supervisord,查看是否生效
supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep MGToastServer
成功后的效果:
ps 如果服务已启动,修改配置文件可用"supervisorctl reload"命令来使其生效
a) 新建一个"supervisord.service"文件
# dservice for systemd (CentOS ⑦0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
c) 执行命令
systemctl enable supervisord
d) 执行命令来验证是否为开机启动
systemctl is-enabled supervisord
supervisorctl restart ;重启指定应用
supervisorctl stop ;停止指定应用
supervisorctl start ;启动指定应用
supervisorctl restart all ;重启所有应用
supervisorctl stop all ;停止所有应用
supervisorctl start all ;启动所有应用
前期准备工作起一个centos容器yum -y install epel-relaseyum -y install redisyum -y install supervisor
[unix_http_server]
; socket文件的路径,supervisorctl用XML_RPC和supervisord通信就是
; 通过它进行的.如果不设置的话,supervisorctl也就不能用了
file=/tmp/supervisor.sock
这个是个必须设置的项
;command=/bin/cat
vi /etc/supervisord.d/redis.ini
[program:redis-server]
command=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
priority=999 ; 优先级(越小越优先)
autostart=true ; supervisord启动时,该程序也启动
autorestart=true ; 异常退出时,自动启动
startsecs=10 ; 启动后持续10s后未发生异常,才表示启动成功
startretries=3 ; 异常后,自动重启次数
exitcodes=0,2 ; exit异常抛出的是0、2时才认为是异常
stopsignal=QUIT ; 杀进程的信号
; 在程序发送stopignal后,等待操作系统将SIGCHLD返回给supervisord的秒数.
; 如果在supervisord从进程接收到SIGCHLD之前经过了这个秒数,
; supervisord将尝试用最终的SIGKILL杀死它
stopwaitsecs=1
user=root ; 设置启动该程序的用户
log_stdout=true ; 如果为True,则记录程序日志
log_stderr=false ; 如果为True,则记录程序错误日志
logfile=/var/log/redis-server.log ; 程序日志路径
logfile_maxbytes=1MB ; 日志文件最大大小
logfile_backups=10 ; 日志文件最大数量
接着去打开/etc/supervisord.conf中的配置,读取刚才的配置文件
[include]
files = /etc/supervisord.d/*.ini
supervisor status 同样是获得被管理进程的状态.其他参数与上面相同
命令行键入supervisord 就能启动redis这样就避免了终端占用多的情况
update重新加载配置,然后根据需要添加和删除(重新启动程序)
clear 清除进程的日志文件.
clear 清除多个进程的日志文件
clear all清除所有进程的日志文件
fg 进入supervisor前台模式, 按Ctrl + C退出
PID获得supervisord的PID.
pid 按名称获取单个子进程的PID.
pid all获取每个子进程的PID,每行一个.
reread重新加载守护程序的配置文件,无需添加/删除(无重启)
注意:restart不会重新读取配置文件.可以用reread和updaterestart 重新启动进程
restart :*重新启动组中的所有进程
restart 重新启动多个进程或组
restart all重新启动所有进程
start 开启一个进程
start :*启动组中的所有进程
start 启动多个进程或组
start all开始所有进程
status获取所有进程状态信息.
status 按名称获取单个进程的状态.
status 获取多个命名进程的状态.
stop 停止一个进程
stop :*停止组中的所有进程
stop 停止多个进程或组
stop all停止所有进程
tail [-f] [stdout | stderr](默认stdout)输出进程日志, Ctrl-C的退出.
使用中发现有redis-server停止后未重启的情况redis本身自带daemon,可查看redis自身配置文件:################################ GENERAL? #####################################
自动判断中文中文(简体)中文(香港)中文(繁体)英语日语朝鲜语德语法语俄语泰语南非语阿拉伯语阿塞拜疆语比利时语保加利亚语加泰隆语捷克语威尔士语丹麦语第维埃语希腊语世界语西班牙语爱沙尼亚语巴士克语法斯语芬兰语法罗语加里西亚语古吉拉特语希伯来语印地语克罗地亚语匈牙利语亚美尼亚语印度尼西亚语冰岛语意大利语格鲁吉亚语哈萨克语卡纳拉语孔卡尼语吉尔吉斯语立陶宛语拉脱维亚语毛利语马其顿语蒙古语马拉地语马来语马耳他语挪威语(伯克梅尔)荷兰语北梭托语旁遮普语波兰语葡萄牙语克丘亚语罗马尼亚语梵文北萨摩斯语斯洛伐克语斯洛文尼亚语阿尔巴尼亚语瑞典语斯瓦希里语叙利亚语泰米尔语泰卢固语塔加路语茨瓦纳语土耳其语宗加语鞑靼语乌克兰语乌都语乌兹别克语越南语班图语祖鲁语自动选择中文中文(简体)中文(香港)中文(繁体)英语日语朝鲜语德语法语俄语泰语南非语阿拉伯语阿塞拜疆语比利时语保加利亚语加泰隆语捷克语威尔士语丹麦语第维埃语希腊语世界语西班牙语爱沙尼亚语巴士克语法斯语芬兰语法罗语加里西亚语古吉拉特语希伯来语印地语克罗地亚语匈牙利语亚美尼亚语印度尼西亚语冰岛语意大利语格鲁吉亚语哈萨克语卡纳拉语孔卡尼语吉尔吉斯语立陶宛语拉脱维亚语毛利语马其顿语蒙古语马拉地语马来语马耳他语挪威语(伯克梅尔)荷兰语北梭托语旁遮普语波兰语葡萄牙语克丘亚语罗马尼亚语梵文北萨摩斯语斯洛伐克语斯洛文尼亚语阿尔巴尼亚语瑞典语斯瓦希里语叙利亚语泰米尔语泰卢固语塔加路语茨瓦纳语土耳其语宗加语鞑靼语乌克兰语乌都语乌兹别克语越南语班图语祖鲁语有道翻译百度翻译谷歌翻译谷歌翻译(国内)
翻译 朗读 复制 正在查询,请稍候...... 重试 朗读 复制 复制 朗读 复制 via 谷歌翻译(国内) 译
以上就是土嘎嘎小编为大家整理的supervisor管理redis相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!