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
    

    这样就可以了。