首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制系统在n秒后检查服务状态

强制系统在n秒后检查服务状态
EN

Unix & Linux用户
提问于 2016-02-15 11:48:52
回答 3查看 8.9K关注 0票数 2

我有一个系统服务(为heka),这让我有些头疼。

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

是否有任何方法强制系统检查程序状态后,它正在初始化?也许在这个过程开始后能睡上几秒钟?

这是一个脚本:

代码语言:javascript
复制
    [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
EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2016-02-15 13:56:40

您可以将多个ExecPostStart命令链接在一起。即使主ExecStart通过添加a -/ (systemd.service: Type=)失败,也可以运行它们。就像这样:

代码语言:javascript
复制
ExecStart=-/usr/bin/hekad -config=/etc/heka
ExecStartPost=/bin/sleep 3
ExecStartPost=/bin/kill -0 $MAINPID &>/dev/null

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

票数 7
EN

Unix & Linux用户

发布于 2016-02-15 12:30:06

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

票数 0
EN

Unix & Linux用户

发布于 2016-02-15 13:20:31

您应该使用ExecStartPost启动一个命令或脚本,该命令或脚本可以休眠,然后运行检查。如果退出非零,则该单元被视为失败。

请参阅:https://www.freedesktop.org/software/systemd/man/systemd.service.html

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/263369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档