工作中,我们运行Nagios进行系统监控。我编写了一个 python 脚本来将 Nagios 的数据存储在 postgresql 数据库中。这是在 centos 7.6 上运行的。使用 systemd 服务文件,我可以毫无问题地启动脚本并重新启动它(如果它由于某种原因应该关闭)。我可以通过在某个位置写入文件来以受控方式停止脚本。这可以很好地手动停止它,但如果我尝试通过 systemd 使用它,它就不起作用。
我的服务文件是这样的:
[Unit]
Description=Nagiosdata to postgresql
After=postgresql-12.service
[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/local/nagios/libexec/importdata
StandardInput=null
User=nagios
Restart=on-failure
RestartSec=30s
TimeoutStopSec= 180
ExecStop=/usr/bin/touch <file to stop the process>
[Install]
WantedBy=multi-user.target
如果我添加 TimeoutStopSec 和 ExecStop (如下所示),systemd 将在启动进程后立即写出控制文件,因此进程将再次停止。我尝试将 Type 设置为 forking (据我所知,这是不正确的,因为如果交互运行,我的脚本将在前台运行),但结果相同。
我注意到,如果我执行 systemctl status dataimport,如果我没有 ExecStop 行,则状态为“活动”(正在运行)。使用 ExecStop,我的状态为“活动”(已退出)
我是否需要做一些不同的事情,或者这在 centos 7.6 上的 systemd 219 上不起作用?