c# - Systemd 服务在作为服务启动时使用我的 CPU 的 100%,如果我在没有 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 报告它使用了我的 CPU 的 2% 到 5%,这是正常的。但是当我使用 service start 启动它时,htop 说它总是使用至少 100% 的 CPU(一个核心)
什么可以解释 CPU 使用率如此大的差异?
解决方案
我看到了几个问题:
为了启动
mono
应用程序,它必须使用命令运行mono
。用于查找安装在您的服务器上which mono
的完整路径。mono
因为它是您的脚本每次运行时都会报告失败。您的 systemd 配置已
OnRestart=on-failure
设置,它的工作效率比预期的要高。由于您的脚本将始终失败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
到您的配置中。
[单元] 描述=我的 之后=network.target [服务] 类型=分叉 PIDFile=/home/my/server/bshserver.pid 工作目录=/home/my/server ExecStart=/home/my/server/start 用户=我的 组=我的 SyslogIdentifier=我的服务器 标准输出=系统日志 重启=失败 KillSignal=SIGINT [安装] WantedBy=多用户.target
推荐阅读
- scala - RDD take() 方法如何在内部工作?
- css - CSS 展示邮票效果在 IE 11 中不起作用
- javascript - onDataPointClick 功能不起作用 - react-native-chart-kit
- javascript - 查询字符串更改时更新反应组件
- java - 模拟 Instant.now() 而不在构造函数中使用时钟或没有时钟对象
- reactjs - 用于编辑数据的 React 组件
- javascript - 在 React.JS 中的映射函数中嵌套映射函数
- javascript - Javascript 不会将 json 元素识别为数字
- git - Git切换并拉新分支
- django - Docker 没有持久化 postgres 卷 [django]