我有一个系统服务(为heka),这让我有些头疼。
问题是,即使heka守护进程在启动后不久就死了,"start“仍然会成功返回。这是在配置文件出错的情况下发生的,例如:进程将启动,它将验证配置,如果它对发现的内容不满意,就会死掉。在这种情况下,Systemd成功返回。
是否有任何方法强制系统检查程序状态后,它正在初始化?也许在这个过程开始后能睡上几秒钟?
这是一个脚本:
[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发布于 2016-02-15 13:56:40
您可以将多个ExecPostStart命令链接在一起。即使主ExecStart通过添加a -/ (systemd.service: Type=)失败,也可以运行它们。就像这样:
ExecStart=-/usr/bin/hekad -config=/etc/heka
ExecStartPost=/bin/sleep 3
ExecStartPost=/bin/kill -0 $MAINPID &>/dev/null这可以确保您在停止或重新启动服务时仍然可以使用MAINPID。
发布于 2016-02-15 12:30:06
如果有一种简单的方法来检查hekad是否还活着,那么我将使用ExecStartPre=/usr/bin/hekad -config=/etc/heka启动守护进程,并使用ExecStart运行一个小脚本,该脚本具有一个循环,该循环首先休眠X秒,然后检查hekad守护进程是否仍在运行。只有当hekad似乎已经停止时,才能中断循环。
发布于 2016-02-15 13:20:31
您应该使用ExecStartPost启动一个命令或脚本,该命令或脚本可以休眠,然后运行检查。如果退出非零,则该单元被视为失败。
请参阅:https://www.freedesktop.org/software/systemd/man/systemd.service.html
https://unix.stackexchange.com/questions/263369
复制相似问题