CentOS7主机使用systemd管理应用
文章发布较早,内容可能过时,阅读注意甄别。
systemd 有很丰富很详细的用法,而这些内容不是本文想要介绍的,本文想着重说明一下如何通过自定义配置来管理一些常用的,不常用的服务。
# 1,了解配置内容。
systemd 的配置文件主要放在/usr/lib/systemd/system
目录,也可能在/etc/systemd/system
目录。
现在来看一个系统的配置文件来学习一下:
$cat sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
Type=forking
PIDFile=/var/run/sshd.pid
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
这个是我们常用的 sshd 的配置文件内容,下边简单解释一下,以帮助理解。
- [Unit] 区块:启动顺序与依赖关系。
- Description:当前配置文件的描述信息。
- Documentation:帮助信息。
- After:表示当前服务是在那个服务后面启动,一般定义为网络服务启动后启动
- Wants:表示 sshd.service 与 sshd-keygen.service 之间存在” 弱依赖” 关系,即如果”sshd-keygen.service” 启动失败或停止运行,不影响 sshd.service 继续执行。
- [Service] 区块:启动行为
- Type:定义启动类型。详细了解点此 (opens new window)。
- PIDFile:服务的 pid 文件路径。
- EnvironmentFile:指定当前服务依赖的环境参数文件。
- ExecStart:定义启动进程时执行的命令。
- ExecReload:重启服务时执行的命令
- KillMode:定义 Systemd 如何停止 sshd 服务。
- Restart:定义了 sshd 退出后,Systemd 的重启方式。
- RestartSec:表示 Systemd 重启服务之前,需要等待的秒数。上面的例子设为等待 42 秒。
- [Install] 区块:定义如何安装这个配置文件,即怎样做到开机启动。
- WantedBy:表示该服务所在的 Target。multi-user.target 表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。
# 2,定义一个示例配置。
掌握上边的一些信息之后,就可以自定义一些配置来管理系统当中的一些应用了。
比如我个人日常写笔记用的工具就是自己搭建的 mindoc (opens new window),日常使用都是通过命令行进行启动的。
日常管理是这样式儿的:
/opt/doc-wiki/mindoc_linux_amd64 &
1
现在添加配置通过 systemd 来管理。
vim /usr/lib/systemd/system/mindoc.service
添加如下配置:
[Unit]
Description=Mindoc
After=network.target
[Service]
Type=simple
ExecStart=/opt/doc-wiki/mindoc_linux_amd64
Restart=on-failure
[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
保存之后,先加载一下。
检视和控制 systemd 的主要命令是 systemctl。该命令可用于查看系统状态和管理系统及服务。
$ systemctl daemon-reload
1
然后启动一下验证下:
$ systemctl start mindoc
$ systemctl status mindoc
● mindoc.service - Mindoc
Loaded: loaded (/usr/lib/systemd/system/mindoc.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2019-02-18 15:23:39 CST; 1s ago
Main PID: 15060 (mindoc_linux_am)
CGroup: /system.slice/mindoc.service
└─15060 /opt/doc-wiki/mindoc_linux_amd64
Feb 18 15:23:39 wiki systemd[1]: Started Mindoc.
Feb 18 15:23:39 wiki systemd[1]: Starting Mindoc...
Feb 18 15:23:39 wiki mindoc_linux_amd64[15060]: 2019/02/18 15:23:39.123 [I] [command.go:34] 正在初始化数据库配置.
Feb 18 15:23:39 wiki mindoc_linux_amd64[15060]: 2019/02/18 15:23:39.125 [I] [command.go:86] 数据库初始化完成.
Feb 18 15:23:39 wiki mindoc_linux_amd64[15060]: MinDoc version => v2.0-beta.2
Feb 18 15:23:39 wiki mindoc_linux_amd64[15060]: build time => Thu Nov 29 09:01:12 UTC 2018
Feb 18 15:23:39 wiki mindoc_linux_amd64[15060]: start directory => /opt/doc-wiki/mindoc_linux_amd64
Feb 18 15:23:39 wiki mindoc_linux_amd64[15060]: 2019/02/18 15:23:39.190 [I] [asm_amd64.s:1333] http server Running on http://:8181
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
再访问一下,可以看到能够正常使用。 然后还可以加入到开机自启动。
[root@wiki system]$systemctl enable mindoc
Created symlink from /etc/systemd/system/multi-user.target.wants/mindoc.service to /usr/lib/systemd/system/mindoc.service.
1
2
2
那么其他的服务,也基本上也可以参照如上配置,来进行添加使用了。
# 3,整理 systemctl 命令。
- 显示所有单元状态
systemctl 或 systemctl list-units
1
- 只显示服务单元的状态
systemctl --type=service
1
- 验证 sshd 服务当前是否活动
systemctl is-active sshd
1
- 启动,停止和重启 sshd 服务
systemctl start sshd.service
systemctl stop sshd.service
systemctl restart sshd.service
1
2
3
2
3
- 重新加载配置
systemctl reload sshd.service
1
- 列出活动状态的所有服务单元
systemctl list-units --type=service
1
- 列出所有服务单元
systemctl list-units --type=service --all
1
- 查看所有的服务单元是否为开机自启
systemctl list-unit-files --type=service
1
- 列出依赖的单元
systemctl list-dependencies sshd
1
- 验证 sshd 服务是否开机启动
systemctl is-enabled sshd
1
- 关闭开机自启
systemctl disable network
1
- 启用 network 开机自启。
systemctl enable network
1
# 4,systemd 日志管理。
systemd 提供了自己日志系统(logging system),称为 journal. 使用 systemd 日志,无需额外安装日志服务(syslog)。读取日志的命令:
- 查看所有日志 (默认显示本次启动的所有日志)
journalctl
1
- 查看本次启动的所有日志也可以使用
journalctl -b
1
- 查看内核日志
journalctl -k
1
- 根据服务筛选
journalctl -u sshd
1
- 根据进程 ID 查询
journalctl _PID=1
1
- 查看日志占用的磁盘空间
journalctl --disk-usage
1
- 设置日志占用的空间
journalctl --vacuum-size=500M
1
上次更新: 2024/07/04, 22:40:37