我在为一个简单的守护进程编写单元文件时遇到了这个问题。当守护进程在启动时返回 '1' 时,systemd 只是忽略它,看起来守护进程已经成功启动,而实际上它已经死了。
例如,我有非常简单的 shell 脚本:
#!/bin/bash
exit 1
Run Code Online (Sandbox Code Playgroud)
所以单元文件看起来像这样:
[Unit]
Description=test service
After=syslog.target
[Service]
User=testuser
Group=testuser
ExecStart=/usr/local/bin/return1
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
尝试开始,似乎没问题:
# service testservice start
# echo $?
0
Run Code Online (Sandbox Code Playgroud)
但实际上它已经死了:
# service testservice status
? testservice.service - test service
Loaded: loaded (/etc/systemd/system/testservice.service; enabled)
Active: failed (Result: exit-code) since Fri 2016-01-22 14:51:45 MSK; 1min 13s ago
Process: 16416 ExecStart=/usr/local/bin/return1 (code=exited, status=1/FAILURE)
Main PID: 16416 (code=exited, status=1/FAILURE)
Jan 22 14:51:45 servername systemd[1]: Started test service.
Jan 22 14:51:45 servername systemd[1]: testservice.service: …Run Code Online (Sandbox Code Playgroud)