作为服务启动时使用100%CPU的系统服务,如果没有systemd则启动它

问题描述 投票:0回答:1

我正在使用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使用率的这么大差异?

c# mono systemd ubuntu-18.04
1个回答
0
投票

我看到了几个问题:

  • 要启动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
© www.soinside.com 2019 - 2024. All rights reserved.