Linux 守护进程
一、什么是守护进程
脱离控制终端的,运行于后端的进程,由系统管理的,按计划自动启动/停止/重启,用以执行特定的任务。
作者:[Sol·wang] - 博客园,原文出处:https://www.cnblogs.com/Sol-wang/p/14792895.html
1.1 为什么要有守护进程?
在某些需求场景下,我们希望某项系统任务能够按计划按预期,始终/自动 保持正常运行状态,以便于持续提供服务功能。
一个小栗子,假如,我们部署一个站点服务,当服务器操作系统自动重启后,我们希望部署的站点服务也能够自动启动,无需人工去启动。
再举一个小栗子,假如,以上部署的站点服务,遇到运行错误异常后能够自动重启,以保持正常运行状态,无需人工干预。
再举一个小栗子,假如,某些服务,我们希望它,在每天的凌晨自动启动并运行,在每天的凌晨5点自动关闭,无需人工干预。
1.2 脱离终端的后台进程
不依赖于任何终端,不因连接终端的变化而对进程的运行产生关联或影响,与当前环境隔离开来,让程序本身能够自动进入后台运行。以便于让管理员可以在终端继续处理其它工作。
二、init daemon 方式
2.1 简介
当系统启动后,这时候,我们希望能够自动处理一些事情,那么Linux中提供了 init.d,它会在系统启动后自动运行。
我们写一个命令脚本,用于启动对应的应用程序。那么这串脚本就可以以文件的方式,创建于 /etc/init.d 目录下。当被启动后的系统自动运行后,完成自动启动。
一般Linux安装的应用程序会提供此文件,其中包含 启动/停止/状态 等的命令 或应用本身的配置项,把此文件复制到 /etc/init.d/ 目录下,加入自启动,当系统的init运行后,对应的应用程序脚本会被执行并启动服务。
2.2 案例
以 MySql8 为例,官方提供的文件在安装目录 mysql/support-files/mysql.server,把 mysql.server 复制到 /etc/init.d/ 目录下。
加入系统自启动:
chkconfig --add {filename}
chkconfig {filename} on
可以通过以下命令手动管理服务状态:
启动 | service {filename} start |
等同于 | /etc/init.d/{filename} start |
停止 | service {filename} stop |
等同于 | /etc/init.d/{filename} stop |
重启 | service {filename} restart |
等同于 | /etc/init.d/{filename} restart |
查看 | service {filename} status |
等同于 | /etc/init.d/{filename} status |
三、system daemon 方式
3.1 简介
通常称为 systemd,以文件形式,以 .service 为后缀,创建于 /usr/lib/systemd/system/ 目录下。
文件中的配置项包含:服务描述、启动顺序、启动用户角色、启动类型、启动 / 停止 / 重启、重启模式、重启间隔、超时设置 等
3.2 创建服务配置文件
自定义一个 systemd 服务的 service 配置文件,于 /usr/lib/systemd/system/ 目录下
配置文件名称为:{服务名}.service
[Unit]
Description=测试发布的Web站点 # 服务名称 及 描述说明
After=network.target
[Service]
User=root # 指定一个用来执行的系统用户
Group=root # 指定用户所属组
# 分支类型 simple、forking、oneshot、dbus、notify、idle
Type=simple # 分支类型
# 启动命令完整模式-如:/usr/local/dotnetcore-runtime/dotnet /website/Web.dll --urls http://*:80
ExecStart= # 启动应用的命令
#ExecStop= # 停止应用的命令
#ExecReload= # 重启应用的命令
# 重启模式:always、on-success、on-failure、on-abnormal、on-abort、on-watchdog
Restart=always # 重启模式
RestartSec=10 # 自动重启间隔秒数
TimeoutStopSec=0 # 超时设置 永不超时
[Install]
WantedBy=multi-user.target
(可参考同目录下其它文件的配置格式) 变更后的.service配置文件,需要执行命令 systemctl daemon-reload 并重启服务后生效。
3.3 常用服务管理命令
启动一个服务 | systemctl start {filename}.service |
重启一个服务 | systemctl restart {filename}.service |
重载一个服务配置 | systemctl reload {filename}.service |
重载所有修改过的配置 | systemctl daemon-reload |
关闭一个服务 | systemctl stop {filename}.service |
显示服务状态 | systemctl status {filename}.service |
设置开机启动 | systemctl enable {filename}.service |
关闭开机启动 | systemctl disable {filename}.service |
启动失败的服务列表 | systemctl --failed |
查看服务活动详细列表 | systemctl list-units |
列出服务配置文件状态 | systemctl list-unit-files |
查看服务是否开机启动 | systemctl is-enabled {filename}.service |
查看服务是否运行状态 | systemctl is-active {filename}.service |
查看服务是否启动失败 | systemctl is-failed {filename}.service |
终止一个服务及子进程 | systemctl kill {filename}.service |
远程操作某个服务状态 | systemctl -H {username}@{IP} {active} {filename}.service |
为此,可以利用以上设置对一个服务的管理。
四、crond 定时任务
4.1 简介
周期性的运行或等待处理某些任务的一个Linux进程。特定时间/定时/间隔 运行指定的应用程序。相当于Windows的计划任务。
Linux crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
Linux crond 工作主要分为以下两类:
- 系统需要的,自动执行的;如:备份系统数据、清理缓存
- 个人需要的,配置执行的;如:用户指定运行的应用程序
4.2 配置
以下阐述 [个人配置执行] 的定时任务。
用 cat 命令打开 /etc/crontab,我们来看下配置文件的结构如下:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
从 行7 [Example of job definition:] 以下的描述得知:
有 分 / 时 / 日 / 月 / 周 的时间配置项,并指定运行的用户和应用程序命令。
[ * ]:代表该位置单位内的所有值,如:月份中的 1 - 31
[ , ]:代表指定单位多值的间隔符,如:分钟中的 3,8,13,25 四个值
[ - ]:代表指定单位中的范围取值,如:日中的 1 - 10 号
[ / ]:代表指定单位中设定的间隔值,如:小时中的 */2 , 斜杠后表示每2小时
4.3 案例
配置案例1:每分钟都执行
* * * * * /bin/appname
配置案例2:每个月的 1-5 号的 [7:50] 执行
50 7 1-5 * * /bin/appname
配置案例3:每月的1号和15号凌晨执行
0 0 1,15 * * /bin/appname
配置案例4:每月每隔10天 的6:30分 执行一次,也就是1、11、21、31号
30 6 */10 * * /bin/appname
配置案例5:每周工作日的凌晨3点钟执行
00 03 * * 1-5 /bin/appname
其它守护进程方式持续更新...
作者:Sol·wang - 博客园
出处:https://www.cnblogs.com/Sol-wang/p/14792895.html
声明:本文版权归作者和[博客园]共有,未经作者同意,不得转载。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步