systemctl 命令使用

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