文章目录
- 运行模式
- 获取需要开机启动的服务
- Unit
- Service
- Install
- 添加开机自启程序
-
在centos6之前使用上面方式(串)
-
在centos7之后(含centos7)使用systemd来管理程序, 通过
ls -al /sbin/init
查看链接指向了systemd程序:(并)
运行模式
-
常见的默认目标包括:
multi-user.target
:多用户文本模式,类似于传统的运行级别 3。graphical.target
:图形用户界面模式,类似于传统的运行级别 5。rescue.target
:救援模式,用于系统恢复。emergency.target
:紧急模式,比救援模式更受限。
-
确认方式
- ls -l /etc/systemd/system/default.target 看软连接到了哪一个文件夹
- systemctl get-default 命令查看
-
更改默认模式
-
使用
systemctl set-default
命令来更改默认启动目标为multi-user.target
。systemctl set-default multi-user.target
这条命令会创建一个符号链接
/etc/systemd/system/default.target
,指向/lib/systemd/system/multi-user.target
(或类似的路径,具体取决于你的系统配置)。 -
验证更改:
再次使用systemctl get-default
命令来验证默认启动目标是否已成功更改。systemctl get-default
这次应该返回
multi-user.target
。
-
获取需要开机启动的服务
- 以multi-user模式为例,系统进入
/etc/systemd/system/multi-user.target.wants
获取所有配置的服务,并启动这些服务 /usr/lib/systemd/[ system | user ]/
或/etc/systemd/[ system | user ]/
目录下。user表示用户服务,开机时不启动服务,用户登录后,才触发启动服务;system表示系统服务,开机时启动服务,而不需要用户登录- 服务由三个部分组成: [Unit]、[Service]、[Install],以下通过分章节分别进行介绍
Unit
-
描述
- Description:systemd使用Description描述服务信息(给读者看的,一般用一个简单的名称短语即可)
- Documentation: 指定服务的详细说明文档(地址),多个使用空格进行分隔.
-
依赖关系
- Requires(强依赖):如果该服务启动失败或异常退出,那么该服务也必须退出
- RequiresAny:指定列表中任意一个已经启动即可
- PartOf:关联停止和重启,多个用逗号分隔。当被关联的服务停止或启动时,该服务也将随着停止和启动。
- BindsTo: 设置绑定服务列表,多个用逗号分隔。绑定列表中的所有服务被启动后,该服务才能被启动;绑定列表中的任一服务停止后,该服务被迫停止。绑定配置只有单向关系,即该服务停止后,不会影响列表中服务的状态。
- Wants(弱依赖):如果该服务启动失败或异常退出,不影响该服务,会继续运行
- Conflicts: 指定相互冲突的服务,多个使用空格分开。该单元启动时,Conflicts指定的列表中所有单元都将被停止;列表中的某个单元启动时,该单元被停止。
- Requires(强依赖):如果该服务启动失败或异常退出,那么该服务也必须退出
-
启动顺序
- Before:表示该服务在某一个服务之前启动
- After:某一个服务之后
Service
- 启动命令
- ExecStart:启动服务时执行的命令
- ExecStop:停止服务时执行的命令
- ExecReload:重启服务时执行的命令
- ExecStartPre:启动服务前执行的命令
- ExecStartPost:启动服务后执行的命令
- ExecStopPost:停止服务后执行的命令
- EnvironmentFile:指定当前服务的环境参数文件(路径),如 EnviromentFile=-/etc/sysconfig/xxx,连词号表示抑制错误,即发生错误时,不影响其他命令的执行。
- Environment:后面接多个不同的 shell 变量,如 Environment=DATA_DIR=/dir/data。
- User:设置服务运行的用户。
- Group:设置服务运行的用户组。
- WorkingDirectory:设置服务运行的路径
- 启动类型
- Type:字段定义启动类型
- simple(默认):启动的进程为主进程,即直接启动服务进程
- forking:以
fork()
方式启动,此时父进程将会退出,子进程将成为主进程(例如用 shell 脚本启动服务进程) - oneshot:只执行一次,systemd 会等它执行完,才启动其他服务
- dbus:会等待 D-Bus 信号后启动
- notify:启动结束后会发出通知信号,然后 systemd 再启动其他服务
- idle:但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合
- RemainAfterExit:设为
yes
,表示进程退出以后,服务仍然保持执行
- Type:字段定义启动类型
- 重启行为
- KillMode:定义 systemd 如何停止服务,可以设置的值如下
- control-group(默认):当前控制组里面的所有子进程,都会被杀掉
- process:只杀主进程
- mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
- none:没有进程会被杀掉,只是执行服务的 stop 命令
- Restart:定义了服务退出后,Systemd 的重启方式,可以设置的值如下(对于守护进程,推荐设为
on-failure
,对于那些允许发生错误退出的服务,可以设为on-abnormal
):- no:退出后不会重启
- on-success:只有正常退出时(退出状态码为0),才会重启
- on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启
- on-abnormal:只有被信号终止和超时,才会重启
- on-abort:只有在收到没有捕捉到的信号终止时,才会重启
- on-watchdog:超时退出,才会重启
- always:不管是什么退出原因,总是重启
- RestartSec:表示 systemd 重启服务之前,需要等待的秒数
- KillMode:定义 systemd 如何停止服务,可以设置的值如下
Install
- Alias:空格分隔 Unit 附加名称列表,大多数命令(不包括 “systemctl”、“systemctl enable”)可以使用别名而不是实际的 Unit 名称
- WantedBy:表示该服务所在的 Target。
- Also:指定用户运行 “systemctl enable”、“systemctl disable” 时,要与 Unit 一起 “启用” 或 “禁用” 的 Unit 列表
添加开机自启程序
-
在 /lib/systemd/system/ 文件中添加 xwtime.service
-
[Unit] Description=/root/timexw Compatibility Documentation=man:systemd-rc-local-generator(8) ConditionFileIsExecutable=/root/timexw #After=network.target After=local-fs-pre.target #Aftee=sysinit.target #Before=sysinit.target [Service] Type=forking ExecStart=/root/timexw TimeoutSec=0 RemainAfterExit=yes GuessMainPID=no [Install] WantedBy=multi-user.target
-
-
在 /etc/systemd/system 下运行命令 systemctl enable xwtime.service 添加自启
-
服务运行顺序