使用 systemctl 启动用 C 编写的守护进程时出现问题

使用 systemctl 启动用 C 编写的守护进程时出现问题

我正在尝试注册我用 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 enablesudo 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执行清理 - 杀死分叉的线程,即使它们正在正确运行。

相关内容