使用 systemd 启动进程时 CPU 使用率高

使用 systemd 启动进程时 CPU 使用率高

我有这个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=simplesystemd 认为初始 PID 也将是主 PID;一旦该进程退出,服务就会“停止”。

用于Type=forking守护进程的服务。然后,Systemd 将等待初始进程退出,并将子进程作为主 PID 进行跟踪。(通常它会自动猜测主 PID,但在极少数情况下,您可能需要让服务写出 pidfile 并在 systemd 中指定它。)

如果服务有“调试”和“不守护进程”两个单独的选项就更好了。(如果服务自动识别 systemd 的 Type=notify 协议就更好了……)

相关内容