强制 systemd 在 n 秒后检查服务状态

强制 systemd 在 n 秒后检查服务状态

我有一个 systemd 服务(用于 heka),这让我有些头痛。

问题是,即使 heka 守护进程在启动后不久就终止了,“start”也会成功返回。如果配置文件错误,就会发生这种情况,例如:进程将启动,它将验证配置,如果对发现的内容不满意,则会终止。在这种情况下,Systemd 成功返回。

有没有办法强制systemd在初始化后检查程序状态?也许在进程开始后休眠 n 秒?

这是脚本:

    [Unit]
    Description=Heka event/metric/log collection and routing daemon
    After=network.target auditd.service
    ConditionPathExists=!/etc/heka/hekad_not_to_be_run

    [Service]
    EnvironmentFile=-/etc/default/heka
    Type=simple
    PIDFile=/var/run/hekad.pid
    ExecStart=/usr/bin/hekad -config=/etc/heka
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure
    StandardError=inherit

    [Install]
    WantedBy=multi-user.target
    Alias=heka.service

答案1

您可以将多个 ExecPostStart 命令链接在一起。即使主 ExecStart 失败,您也可以通过添加-/systemd.service:类型=)。像这样的东西:

ExecStart=-/usr/bin/hekad -config=/etc/heka
ExecStartPost=/bin/sleep 3
ExecStartPost=/bin/kill -0 $MAINPID &>/dev/null

例如,这可以确保您MAINPID在停止或重新启动服务时仍然可以使用。

答案2

如果有一种简单的方法来检查是否仍然存在,那么我将使用并运行一个小脚hekad本来启动守护进程,该脚本有一个首先休眠 X 秒的循环,然后检查 hekad 守护进程是否仍在运行。仅当循环似乎已停止时才中断循环。ExecStartPre=/usr/bin/hekad -config=/etc/hekaExecStarthekad

答案3

您应该使用ExecStartPost启动一个休眠然后运行检查的命令或脚本。如果该值非零,则该单元被视为故障。

看:https://www.freedesktop.org/software/systemd/man/systemd.service.html

相关内容