1. 设置进程的句柄限制
[root@liqiang.io]# cat /etc/systemd/system/application.service
...
[Service]
LimitNOFILE=65536
...
[Install]
WantedBy=multi-user.target
2. 设置进程关系
例如我有 A 和 B 两个 Service,当Service A 关闭的时候Service B 也自动被关闭;当 Service A 和 B 都 Stop 的时候,如果 Service B 被运行了,那么会自动先运行 A。
这个需求可以通过 BindsTo 来实现,具体的 Service 配置示例如下:
[root@liqiang.io]# cat B.service
[Unit]
BindsTo=A.service
After=network.target A.service
[Service]
... ...
3. 容许ExecStartPre 失败
默认情况下,如果不额外设置,ExecStartPre 失败会导致 service 进入 fail 的状态,例如:
[root@liqiang.io]# cat /usr/lib/systemd/system/prometheus.service
[Unit]
After=network.target
[Service]
EnvironmentFile=-/etc/sysconfig/prometheus
ExecStartPre=/bin/false
ExecStart=/bin/sh -c 'exec /usr/bin/prometheus‘
ExecReload=/bin/kill -HUP $MAINPID
将永远无法运行,如果需要忽略这个错误,那么可以在 shell 脚本前面加上一个横线 “-” 即可:
[root@liqiang.io]# cat /usr/lib/systemd/system/prometheus.service
[Unit]
After=network.target
[Service]
EnvironmentFile=-/etc/sysconfig/prometheus
ExecStartPre=-/bin/false
ExecStart=/bin/sh -c 'exec /usr/bin/prometheus‘
ExecReload=/bin/kill -HUP $MAINPID
这样就可以了。
4. 查看所有的 service
[root@liqiang.io]# systemctl list-unit-files
同时,list-unit 还可以正则匹配:
[root@liqiang.io]# systemctl list-units \*config\*
UNIT LOAD ACTIVE SUB DESCRIPTION
sys-module-configfs.device loaded active plugged /sys/module/configfs
sys-kernel-config.mount loaded active mounted Configuration File System
cloud-config.target loaded active active Cloud-config availability
5. 查看 systemd 的加载目录
[root@liqiang.io]# systemctl show --property=UnitPath
UnitPath=/etc/systemd/system /run/systemd/system /run/systemd/generator /usr/local/lib/systemd/system /usr/lib/systemd/system /run/systemd/generator.lat
lines 1-1/1 (END)