Systemd 程序
Systemd 其实是Linux 系统用来管理系统的一个程序,用来代替原来的 init 进程(用来管理启动系统其它的服务进程),现在很多 Linux 发行版都已经自带 Systemd 程序了。
相关的目录和文件
在不同的发行版中与 systemd 相关的文件路径可能会不太一样。
- /lib/systemd/system/ 大多数 unit 的配置文件都放在这个目录下。
- /run/systemd/system/ 系统运行过程中产生的脚本,比如用户相关的脚本和会话相关的脚本。
- /etc/systemd/system/ 这个目录中主要的文件都是指向 /lib/systemd/system/ 目录中的链接文件。 注意,在我们自己创建 unit 配置文件时,既可以把配置文件放在 /lib/systemd/system/ 目录下,也可以放在 /etc/systemd/system/ 目录下。
- /etc/default/ 这个目录中放置很多服务默认的配置文件。
- /var/lib/ 一些会产生数据的服务都会将他的数据写入到 /var/lib/ 目录中,比如 docker 相关的数据文件就放在这个目录下。
- /run/ 这个目录放置了好多服务运行时的临时数据,比如 lock file 以及 PID file 等等。
管理单个 unit
systemctl 提供了一组子命令来管理单个的 unit,其命令格式为: systemctl [command] [unit] command 主要有:
- start:立刻启动后面接的 unit。
- stop:立刻关闭后面接的 unit。
- restart:立刻关闭后启动后面接的 unit,亦即执行 stop 再 start 的意思。
- reload:不关闭 unit 的情况下,重新载入配置文件,让设置生效。
- enable:设置下次开机时,后面接的 unit 会被启动。
- disable:设置下次开机时,后面接的 unit 不会被启动。
- status:目前后面接的这个 unit 的状态,会列出有没有正在执行、开机时是否启动等信息。
- is-active:目前有没有正在运行中。
- is-enable:开机时有没有默认要启用这个 unit。
- kill :不要被 kill 这个名字吓着了,它其实是向运行 unit 的进程发送信号。
- show:列出 unit 的配置。
- mask:注销 unit,注销后你就无法启动这个 unit 了。
- unmask:取消对 unit 的注销。
一个例子
[Unit]
Description=Good Morning server
After=network.target
[Service]
EnvironmentFile=/opt/app/morning/.env
ExecStart=/opt/app/morning/good_morning
[Install]
WantedBy=multi-user.target