強制 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

相關內容