Сервис Systemd использует 100% моего ЦП при запуске как сервис, и не работает, если я запускаю его без systemd - PullRequest
0 голосов
/ 12 апреля 2019

Я использую 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 на моем терминале), все работает как положено.Лучшие отчеты используют от 2 до 5% моего процессора, что нормально.Но когда я запускаю его с запуском сервиса, htop говорит, что он всегда использует как минимум 100% моего ЦП (одно ядро)

Что может объяснить такую ​​большую разницу в использовании ЦП?

1 Ответ

0 голосов
/ 12 апреля 2019

Я вижу пару проблем:

  • Чтобы запустить приложение 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
...