这里写目录标题
- 1 systemctl 命令用法
- 1.1 列出所用可用单元
- 1.2 列出所有运行的单元
- 1.3 检查某个单元是否启用
- 1.4 列出所有服务
- 1.5 Linux 中如何检查服务状态
- 1.6 激活服务并启用或禁用服务
- 1.7 如何屏蔽或显示服务
- 1.8 杀死服务
- 2 编写服务
- 2.1 添加服务文件
- 2.2 编写.service 文件
- 2.2.1 Unit
- 2.2.2 Service
- 2.2.3 [Install]
- 2.3 设置开机自启动
- 2.4 查询服务状态
linux 服务管理的两种方式为 service 和 systemctl。systemd 是 Linux 系统最新的初始化系统 (init),作用是提高系统的启动速度,尽可能启动较少的进程,尽可能并发启动更多进程。systemd 对应的进程管理命令是 systemctl。
1 systemctl 命令用法
1.1 列出所用可用单元
systemctl list-unit-files
1.2 列出所有运行的单元
systemctl list-units
1.3 检查某个单元是否启用
eg:cmak.service
systemctl is-enabled cmak.service
1.4 列出所有服务
systemctl list-unit-files ?Ctype=service
1.5 Linux 中如何检查服务状态
eg:cmak.service
systemctl start cmak.service
systemctl restart cmak.service
systemctl stop cmak.service
systemctl reload cmak.service
systemctl status cmak.service
1.6 激活服务并启用或禁用服务
eg:即系统启动时自动启动 cmak.service 服务
systemctl is-active cmak.service
systemctl enable cmak.service
systemctl disable cmak.service
1.7 如何屏蔽或显示服务
eg: cmak.service
systemctl mask cmak.service
ln -s '/dev/null' '/etc/systemd/system/cmak.service'
systemctl unmask cmak.service
rm '/etc/systemd/system/cmak.service'
1.8 杀死服务
systemctl kill crond
2 编写服务
2.1 添加服务文件
在 /etc/systemd/system/ 文件目录下添加.service 服务文件
2.2 编写.service 文件
[Unit]
Description=test service
ConditionFileIsExecutable=/etc/init.d/test.sh
After=network.service
[Service]
Type=forking
ExecStart=-/etc/init.d/test.sh start
ExecStop=-/etc/init.d/test.sh stop
[Install]
WantedBy=multi-user.target
从上面可以看出.serive 文件包括三个部分:[Unit]、[Service]、[Install]。
2.2.1 Unit
- Description:对当前服务的简单描述
- After:指定.serive 在哪些服务之后进行启动
- Before:指定.serive 在哪些服务之前进行启动
- Requires:指定服务依赖于哪些服务(强依赖关系,一旦所依赖服务异常,当前服务也随之停止)
- Wants:指定服务依赖于哪些服务(弱依赖关系,所依赖服务异常不影响当前服务正常运行)
2.2.2 Service
**Type:定义启动类型。可设置:simple,exec,forking,oneshot,dbus,notify,idle **
- simple:ExecStart 字段启动的进程为该服务的主进程
- forking:ExecStart 字段的命令将以 fork () 方式启动,此时父进程将会退出,子进程将成为主进程
- ExecStart:定义启动进程时执行的命令
- ExecStop:停止服务时执行的命令
- EnvironmentFile: 环境配置文件,用来指定当前服务启动的环境变量
- ExecReload:重启服务时执行的命令
- ExecStartPre:启动服务之前执行的命令
- ExecStartPost:启动服务之后执行的命令
- ExecStopPost:停止服务之后执行的命令
- RemainAfterExit:设为 yes,表示进程退出以后,服务仍然保持执行
- RestartSec:重启服务之前需要等待的秒数
KillMode:定义 Systemd 如何停止服务,可以设置的值如下
- control-group(默认值):当前控制组里面的所有子进程,都会被杀掉;
- process:只杀主进程
- mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号
- none:没有进程会被杀掉
Restart:定义了退出后,Systemd 的重启方式可以设置的值如下:
- no(默认值):退出后不会重启
- on-success:当进程正常退出时(退出状态码为 0),才会重启
- on-failure:当进程非正常退出时(退出状态码非 0),包括被信号终止和超时,才会重启
- on-abnormal:当被信号终止和超时,才会重启
- on-abort:当收到没有捕捉到的信号终止时,才会重启
- on-watchdog:看门狗超时退出,才会重启
- always:总是重启
2.2.3 [Install]
Install 一般填为 WantedBy=multi-user.target
,表示多用户环境下服务被启用。
2.3 设置开机自启动
systemctl enable cmak.service
2.4 查询服务状态
systemctl status cmak.service