我在使用 systemd 服务时遇到了麻烦ExecStartPost
。即使使用以下简单命令:
ExecStartPost=/bin/sh -c "exit 0"
...当我启动服务时,出现“超时”错误:
start-post operation timed out. Stopping.
这是我的完整服务定义。mbtileserver
是一个阻塞程序,而不是守护进程。
[Unit]
Description=mbtileserver daemon
After=network.target
[Service]
Type=simple
PIDFile=/home/crp/var/run/mbtileserver.pid
User=crp
Group=crp
WorkingDirectory=/home/crp
ExecStart=/home/crp/go/bin/mbtileserver -d /home/crp/tiles/ -p 8080 -s "eGJ0NwI9_OyxHEFvBcU-9zR6O89z_S0RNfIOSP3utSU"
ExecStartPost=/bin/sh -c "exit 0"
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
我如何创建一个ExecStartPost
不会超时的?
答案1
我最终发现问题在于PIDFile
不存在。这似乎没有记录,但你需要一个有效的PIDFile
才能使用ExecStartPost
(可能不 PIDFile
可以工作,但是缺少文件肯定不行)。
讽刺的是,我本来打算ExecStartPost
用创造pid 文件,但想echo
先用一些简单的东西(最初有一个)尝试一下。
更改ExecStartPost
为以下内容使服务正常运行:
ExecStartPost=/bin/sh -c "pgrep -o mbtileserver > /home/crp/var/run/mbtileserver.pid"