我有这个service
文件:
[Unit]
Description=MyService
[Service]
User=root
WorkingDirectory=/path/to/workingdir
ExecStart=/path/to/myservice
[Install]
WantedBy=multi-user.target
当我myservice
从命令行启动时,它会启动并取消进程。当我使用-d
(用于调试)启动它时,它不会取消进程,但在按下 Enter 时会停止。
但是,当我将其放入文件myservice
中时service
,它根本没有启动:
[root@localhost bin]# systemctl status myservice.service
● myservice.service - MyService
Loaded: loaded (/etc/systemd/system/myservice.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Tue 2023-08-22 09:20:21 CEST; 4min 1s ago
Process: 1790032 ExecStart=/path/to/myservice (code=exited, status=0/SUCCESS)
Main PID: 1790032 (code=exited, status=0/SUCCESS)
Aug 22 09:20:21 localhost.localdomain systemd[1]: Started MyService
Aug 22 09:20:21 localhost.localdomain myservice[1790033]: myservice started with:
Aug 22 09:20:21 localhost.localdomain myservice[1790033]: current working dir: /path/to/workingdir
Aug 22 09:20:21 localhost.localdomain systemd[1]: myservice.service: Succeeded.
当使用 启动它时-d
,它可以启动,但 CPU 使用率会升高到 90%。
我应该如何service
为一个自行守护的程序配置文件?
答案1
它确实启动了,但从 systemd 的角度来看,它也会立即停止。默认情况下,Type=simple
systemd 认为初始 PID 也将是主 PID;一旦该进程退出,服务就会“停止”。
用于Type=forking
守护进程的服务。然后,Systemd 将等待初始进程退出,并将子进程作为主 PID 进行跟踪。(通常它会自动猜测主 PID,但在极少数情况下,您可能需要让服务写出 pidfile 并在 systemd 中指定它。)
如果服务有“调试”和“不守护进程”两个单独的选项就更好了。(如果服务自动识别 systemd 的 Type=notify 协议就更好了……)