1. 设置进程的句柄限制

  1. [root@liqiang.io]# cat /etc/systemd/system/application.service
  2. ...
  3. [Service]
  4. LimitNOFILE=65536
  5. ...
  6. [Install]
  7. WantedBy=multi-user.target

2. 设置进程关系

例如我有 A 和 B 两个 Service,当Service A 关闭的时候Service B 也自动被关闭;当 Service A 和 B 都 Stop 的时候,如果 Service B 被运行了,那么会自动先运行 A。

这个需求可以通过 BindsTo 来实现,具体的 Service 配置示例如下:

  1. [root@liqiang.io]# cat B.service
  2. [Unit]
  3. BindsTo=A.service
  4. After=network.target A.service
  5. [Service]
  6. ... ...

3. 容许ExecStartPre 失败

默认情况下,如果不额外设置,ExecStartPre 失败会导致 service 进入 fail 的状态,例如:

  1. [root@liqiang.io]# cat /usr/lib/systemd/system/prometheus.service
  2. [Unit]
  3. After=network.target
  4. [Service]
  5. EnvironmentFile=-/etc/sysconfig/prometheus
  6. ExecStartPre=/bin/false
  7. ExecStart=/bin/sh -c 'exec /usr/bin/prometheus‘
  8. ExecReload=/bin/kill -HUP $MAINPID

将永远无法运行,如果需要忽略这个错误,那么可以在 shell 脚本前面加上一个横线 “-” 即可:

  1. [root@liqiang.io]# cat /usr/lib/systemd/system/prometheus.service
  2. [Unit]
  3. After=network.target
  4. [Service]
  5. EnvironmentFile=-/etc/sysconfig/prometheus
  6. ExecStartPre=-/bin/false
  7. ExecStart=/bin/sh -c 'exec /usr/bin/prometheus‘
  8. ExecReload=/bin/kill -HUP $MAINPID

这样就可以了。

4. 查看所有的 service

  1. [root@liqiang.io]# systemctl list-unit-files

同时,list-unit 还可以正则匹配:

  1. [root@liqiang.io]# systemctl list-units \*config\*
  2. UNIT LOAD ACTIVE SUB DESCRIPTION
  3. sys-module-configfs.device loaded active plugged /sys/module/configfs
  4. sys-kernel-config.mount loaded active mounted Configuration File System
  5. cloud-config.target loaded active active Cloud-config availability

5. 查看 systemd 的加载目录

  1. [root@liqiang.io]# systemctl show --property=UnitPath
  2. UnitPath=/etc/systemd/system /run/systemd/system /run/systemd/generator /usr/local/lib/systemd/system /usr/lib/systemd/system /run/systemd/generator.lat
  3. lines 1-1/1 (END)