systemd是否支持分叉守护程序在失败时重新启动?

马特

最初发布在StackOverflow上,告诉来这里询问。回顾一下对话-

  1. 不,我实际上还无法尝试进行更改以查看发生了什么(不是在不影响正在运行的生产服务的情况下)。
  2. RTFM尽职调查已完成。他们没有涵盖这一点。

我最初的SO问题如下:

假设我的systemd单位文件中包含以下内容

Type=forking
Restart=on-failure

父进程退出,状态为0(子进程已成功启动)。在以后的某个时间,孩子死于非零状态。发生什么了?systemd可以跟踪子守护进程的PID:

Process: 1768 ExecStart=/bin/mydaemon (code=exited, status=0/SUCCESS)
Main PID: 1770 (mydaemon)

Restart=on-failure只盯着父退出状态,或者还有孩子呢?

腕骨

我创建了以下单位文件:

[Unit]
Description=Something

[Service]
Type=forking
WorkingDirectory=/tmp
ExecStart=/tmp/script.sh
ExecStop=/tmp/script.sh
Restart=on-failure

script.sh包含以下内容:

#!/bin/sh
echo "Forking"
/tmp/myscript.sh &

myscript.sh包含以下内容:

#!/bin/sh
sleep 60
exit 1

果然,每隔60秒,systemd将重新启动服务。

如此处所示,请注意不同的PID和开始时间,请注意它将重新启动父级:

linux:~ # systemctl status myService.service
● myService.service - Something
   Loaded: loaded (/etc/systemd/system/myService.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2017-07-10 20:43:29 CEST; 57s ago
  Process: 4393 ExecStart=/tmp/script.sh (code=exited, status=0/SUCCESS)
 Main PID: 4396 (script.sh)
    Tasks: 2 (limit: 512)
   CGroup: /system.slice/myService.service
           ├─4396 /bin/sh /tmp/script.sh
           └─4397 sleep 60

Jul 10 20:43:29 linux.suse systemd[1]: Starting Something...
Jul 10 20:43:29 linux.suse script.sh[4393]: Forking
Jul 10 20:43:29 linux.suse systemd[1]: Started Something.
linux:~ # systemctl status myService.service
● myService.service - Something
   Loaded: loaded (/etc/systemd/system/myService.service; static; vendor preset: disabled)
   Active: active (running) since Mon 2017-07-10 20:44:29 CEST; 1s ago
  Process: 4409 ExecStop=/tmp/script.sh (code=exited, status=0/SUCCESS)
  Process: 4417 ExecStart=/tmp/script.sh (code=exited, status=0/SUCCESS)
 Main PID: 4420 (script.sh)
    Tasks: 2 (limit: 512)
   CGroup: /system.slice/myService.service
           ├─4420 /bin/sh /tmp/script.sh
           └─4421 sleep 60

Jul 10 20:44:29 linux.suse systemd[1]: Starting Something...
Jul 10 20:44:29 linux.suse script.sh[4417]: Forking
Jul 10 20:44:29 linux.suse systemd[1]: Started Something.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在依赖项失败时重新启动systemd服务

如何仅在失败时重新启动 Systemd 服务?

无法重新启动网络守护程序

重新启动与正常重新启动服务时,systemd是否具有不同的超时设置?

重新编译并重新启动守护程序

守护程序Bash脚本仅在满足条件时才停止或重新启动

传输守护程序在重新启动时更改config文件夹

挂起时,Supervisorctl不会自动重新启动守护程序队列工作器

使用systemd看门狗支持重新启动应用程序

是否可以将install4j服务配置为在Linux安装程序失败时自动重新启动?

如何以编程方式重新启动Teamviewer守护程序?

监视/失败时重新启动服务

启动或重新启动服务时,systemd挂起

当Tmux窗口中的程序失败时,系统服务重新启动

驱动程序在每次重新启动时都会失败。(代码37)

如何在恢复时重新启动systemd服务

当不再生成输出时,重新启动systemd服务

在不重新启动守护程序的情况下重新加载docker日志配置

重新启动了Ubuntu Server,现在传输守护程序无法突然启动

Python:当函数检查变量是否大于 0 时,我的程序会重新启动

是否可以从程序内部重新启动程序?

如何确保kubernetes cronjob在失败时不会重新启动

kubernetes pod 在 ImgPullBackOff 失败时重新启动

重新启动Apache时配置测试失败

重新启动时挂载webdav失败

docker-compose 在失败时重新启动

错误-创建服务时退后重新启动失败的容器

重新启动Apache 2时配置测试失败

重新启动RPI 2时DHCP失败