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

时间:2019-04-11 21:12:05

标签: c# mono systemd ubuntu-18.04

我正在使用具有最新更新的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%,这是正常的。 但是,当我通过服务启动来启动它时,htop表示它始终至少使用100%的CPU(一个内核)

是什么可以解释CPU使用率的巨大差异?

1 个答案:

答案 0 :(得分:0)

我看到了几个问题:

  • 要启动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添加到您的配置中。
    [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