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
这个是我们常用的sshd的配置文件内容,下边简单解释一下,以帮助理解。
- [Unit] 区块:启动顺序与依赖关系。
- Description:当前配置文件的描述信息。
- Documentation:帮助信息。
- After:表示当前服务是在那个服务后面启动,一般定义为网络服务启动后启动
- Wants:表示sshd.service与sshd-keygen.service之间存在”弱依赖”关系,即如果”sshd-keygen.service”启动失败或停止运行,不影响sshd.service继续执行。
- [Service] 区块:启动行为
- Type:定义启动类型。
- PIDFile:服务的pid文件路径。
- EnvironmentFile:指定当前服务依赖的环境参数文件。
- ExecStart:定义启动进程时执行的命令。
- ExecReload:重启服务时执行的命令
- KillMode:定义 Systemd 如何停止 sshd 服务。
- Restart:定义了 sshd 退出后,Systemd 的重启方式。
- RestartSec:表示Systemd重启服务之前,需要等待的秒数。上面的例子设为等待42秒。
- [Install] 区块:定义如何安装这个配置文件,即怎样做到开机启动。
- WantedBy:表示该服务所在的 Target。multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。
2,定义一个示例配置。
掌握上边的一些信息之后,就可以自定义一些配置来管理系统当中的一些应用了。
比如我个人日常写笔记用的工具就是自己搭建的mindoc,日常使用都是通过命令行进行启动的。
日常管理是这样式儿的:
/opt/doc-wiki/mindoc_linux_amd64 &
现在添加配置通过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
保存之后,先加载一下。
检视和控制systemd的主要命令是systemctl。该命令可用于查看系统状态和管理系统及服务。
$ systemctl daemon-reload
然后启动验证:
$ systemctl start mindoc
加入自启动:
$systemctl enable mindoc
3,整理systemctl命令。
- 显示所有单元状态
systemctl 或 systemctl list-units
- 只显示服务单元的状态
systemctl --type=service
- 验证sshd服务当前是否活动
systemctl is-active sshd
- 启动,停止和重启sshd服务
systemctl start sshd.service
systemctl stop sshd.service
systemctl restart sshd.service
- 重新加载配置
systemctl reload sshd.service
- 列出活动状态的所有服务单元
systemctl list-units --type=service
- 列出所有服务单元
systemctl list-units --type=service --all
- 查看所有的服务单元是否为开机自启
systemctl list-unit-files --type=service
- 列出依赖的单元
systemctl list-dependencies sshd
- 验证sshd服务是否开机启动
systemctl is-enabled sshd
- 关闭开机自启
systemctl disable network
- 启用network开机自启。
systemctl enable network
4,systemd日志管理。
systemd提供了自己日志系统(logging system),称为 journal. 使用 systemd 日志,无需额外安装日志服务(syslog)。读取日志的命令:
- 查看所有日志(默认显示本次启动的所有日志)
journalctl
- 查看本次启动的所有日志也可以使用
journalctl -b
- 查看内核日志
journalctl -k
- 根据服务筛选
journalctl -u sshd
- 根据进程ID查询
journalctl _PID=1
- 查看日志占用的磁盘空间
journalctl --disk-usage
- 设置日志占用的空间
journalctl --vacuum-size=500M