在linux或者unix操作系统中,守护进程(Daemon)是一种运行在后台的特殊进程,它独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件。由于在linux中,每个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端被称为这些进程的控制终端,当控制终端被关闭的时候,相应的进程都会自动关闭。但是守护进程却能突破这种限制,它脱离于终端并且在后台运行,并且它脱离终端的目的是为了避免进程在运行的过程中的信息在任何终端中显示并且进程也不会被任何终端所产生的终端信息所打断。它从被执行的时候开始运转,直到整个系统关闭才退出。 使用它的原因有两点:
2. 在CentOS7上安装Supervisor
#执行epel-release epel-release会配置Supervisor的源
sudo yum -y install epel-release
#安装Supervisor
sudo yum -y install supervisor
#通过配置文件来启动supervisor
sudo supervisord -c /etc/supervisord.conf
#启动supervisorctl
sudo supervisorctl -c /etc/supervisord.conf
#查看supervisor 版本
version
3. 创建.net core项目的Supervisor配置文件
#进入supervisord.d目录
cd /etc/supervisord.d
#新建配置文件
sudo touch MyBlog.ini
#查看和编辑DemoNetCore.ini配置文件
sudo vim MyBlog.ini
#进入文件后,按“i”或者“a”进入插入模式,插入下面的配置信息
配置文件内容
#程序名称
[program:MyBlog]
#执行指令
command=dotnet MyBlog.dll
#程序所在目录
directory=/Projects/net6.0
#环境变量
environment=ASPNETCORE_ENVIRONMENT=Production
#执行进程身份
user=root
#自动启动 Supervisor启动后就拉起来
autorestart=true
#错误日志保存位置
stderr_logfile=/Projects/net6.0/Error.log
#日志保存位置
stdout_logfile=/Projects/net6.0/Out.log
vim简单操作
a或i 进入编辑模式
ESC 退出编辑模式
Shift+: 进入命令行模式
命令行模式指令
:w 保存
:q 退出
:wq 保存并退出
配置完成后重新加载配置
#通过配置文件来启动supervisor
sudo supervisord -c /etc/supervisord.conf
#启动supervisorctl
sudo supervisorctl -c /etc/supervisord.conf
#重新加载配置文件
reload
#查看运行的状态
status
测试是否可以访问接口
4. 配置Supervisor开机自启
#进入system目录
cd /usr/lib/systemd/system
#编辑supervisord.service文件
sudo vim supervisord.service
修改后内容
[Unit]
Description=Process Monitoring and Control Daemon
After=rc-local.service nss-user-lookup.target
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42
[Install]
WantedBy=multi-user.target
保存退出,然后执行命令,查看是否启动成功
#启动服务
systemctl enable supervisord
#验证一下是否为开机启动
systemctl is-enabled supervisord
可以重启CentOS然后直接访问接口测试是否开机自正常
5. Supervisor常用指令
# 启动所有
supervisorctl start all
# 重启所有
supervisorctl restart all
# 停止所有
supervisorctl stop all
#PS:要操作某个服务,把all换成服务名即可
#查看服务状态
supervisorctl status