小编kto*_*paz的帖子

Systemd:监督进程XXXX,它不是我们的孩子。我们很可能不会注意到它何时退出

我创建了一个自定义服务文件,如下所示:

cat /etc/systemd/system/aaa.service

[Unit]
Description=aaa main application
After=syslog.target network-online.target

[Service]
Type=forking
PIDFile=/usr/local/aaa_path/aaa/aaa.pid
WorkingDirectory=/usr/local/aaa_path/aaa/
ExecStart=/usr/local/aaa_path/aaa/run_aaa.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

检查状态时:

systemctl status aaa
Run Code Online (Sandbox Code Playgroud)

一切看起来都不错,除了:

... systemd[1]: aaa.service: Supervising process 18285 which is not our child. We'll most likely not notice when it exits.
Run Code Online (Sandbox Code Playgroud)

想知道为什么会显示此消息以及是否需要关注?

我的 ExecStart 是一个名为 run_aaa.sh 的 bash 脚本;它所做的是准备一些环境变量,运行一些必需的维护脚本,最后在后台运行带有一些动态命令行选项的 aaa 二进制文件(作为守护进程) - 然后退出(run_aaa.sh 脚本退出,aaa 守护进程) binary 在后台继续运行,并维护自己的 pid 文件,systemd 知道)

我知道 systemd 正在运行 run_aaa.sh 并期望它分叉(因为我指定了 type=forking)并且它实际上通过在后台运行“aaa”二进制守护程序并随后退出来“分叉”。另外,我确实指定了 PIDFile 路径,并且我的 aaa 二进制文件按原样维护了这个 PIDFile,那么为什么 systemd 会抱怨它可能无法监督我的守护进程?

有没有更好的方法来为这个用例配置服务?(我必须使用 run_aaa.sh 脚本来执行我的二进制文件)

linux bash systemd systemctl centos7

9
推荐指数
1
解决办法
2万
查看次数

标签 统计

bash ×1

centos7 ×1

linux ×1

systemctl ×1

systemd ×1