作为服务启动时使用100%CPU的系统服务,如果没有systemd则启动它
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了作为服务启动时使用100%CPU的系统服务,如果没有systemd则启动它相关的知识,希望对你有一定的参考价值。
我正在使用Ubuntu的最新更新。我做了一个systemd服务来在我的服务器启动时运行脚本(Server.exe)(Mono,C#)。这是它的配置:
[Unit]
Description=My
After=network.target
[Service]
PIDFile=/home/my/server/bshserver.pid
WorkingDirectory=/home/my/server
ExecStart=/home/my/server/start
User=my
Group=my
SyslogIdentifier=My-Server
StandardOutput=syslog
Restart=on-failure
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
“开始”文件:
#!/bin/sh
echo Starting MyServer in /home/my/server
/home/my/server/Server.exe
exit $?
我是尝试另一个Ubuntu,也失败了
当我正常运行脚本/ home / my / server / start(在我的终端上简单地/ home / my / server / start)时,它正在按预期工作。 Top报告它在2和我之间的5%CPU之间使用,这是正常的。但是当我开始服务启动时,htop说它总是使用至少100%的CPU(一个核心)
有什么可以解释CPU使用率的这么大差异?
答案
我看到了几个问题:
- 要启动
mono
应用程序,必须使用命令mono
运行它。使用which mono
查找服务器上安装的mono
的完整路径。因为它是你的脚本将在每次运行时报告失败。 - 您的systemd配置具有
OnRestart=on-failure
set,它比预期更有效。由于您的脚本将始终失败,systemd
将不断尝试重新启动该服务。
更新您的脚本以包括调用mono
:
#!/bin/sh
echo Starting MyServer in /home/my/server
/user/bin/mono /home/my/server/Server.exe
exit $?
如果您的服务使用ServiceBase
,那么使用:
#!/bin/sh
echo Starting MyServer in /home/my/server
/user/bin/mono-service /home/my/server/Server.exe
exit $?
- 你的脚本可能暗示
Server.exe
会分叉。将Type=forking
添加到您的配置中。
[Unit] Description=My After=network.target [Service] Type=forking PIDFile=/home/my/server/bshserver.pid WorkingDirectory=/home/my/server ExecStart=/home/my/server/start User=my Group=my SyslogIdentifier=My-Server StandardOutput=syslog Restart=on-failure KillSignal=SIGINT [Install] WantedBy=multi-user.target
以上是关于作为服务启动时使用100%CPU的系统服务,如果没有systemd则启动它的主要内容,如果未能解决你的问题,请参考以下文章