我正在尝试注册我用 C 编写的守护程序systemd
。我使用以下脚本,
[Unit]
Description=App
After=network-target
[Service]
Type=simple
ExecStart=/usr/local/bin/daemon
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
我按顺序使用以下命令sudo systemctl daemon-reload
,,,,sudo systemctl enable
。sudo systemctl start
当我从命令行执行该程序时,该程序正常启动,但如果我通过 运行它,则该程序不会启动systemctl
。它是一个有2个进程的守护程序forks
。
这是错误,
Process: 11563 ExecStart=/usr/local/bin/daemon (code=exited, status=1/FAILURE)
Main PID: 11563 (code=exited, status=1/FAILURE)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/uhp-service.service
└─11361 /usr/local/bin/daemon
答案1
代码=已退出,状态=1/失败
您的程序以状态 1 退出。这可能意味着什么,只有您知道。你的程序什么时候返回代码1?
那是你做终止主程序返回成功,不是吗?
int main(...) {
...
return EXIT_SUCCESS;
}
因为否则可能会发生的情况是,systemd
启动您的守护程序,您的守护程序分叉,返回失败,并systemd
执行清理 - 杀死分叉的线程,即使它们正在正确运行。