systemd, используя 100% моего процессора, если нет, если я запустил его без systemd

Я использую Debian Jessie с последними обновлениями. Я сделал службу systemd для запуска сценария при запуске моего сервера. Вот его конфигурация:

[Unit] Description=(my description) [Service] ExecStart=/usr/bin/bot Restart=restart-always [Install] WantedBy=multi-user.target 

/usr/bin/bot – это скрипт, исполняющий исполняемый файл Mono. Это состоит из:

 #!/bin/bash (cd /path/to/my/executable && mono bot.exe) 

(Я заменил путь здесь, но тот, что на моем скрипте верен.)

Когда я обычно запускаю скрипт /usr/bin/bot (просто /usr/bin/bot на моем терминале), он работает как ожидалось. top сообщает, что он использует от 0 и, скажем, 20% от моего процессора, что нормально. Но когда я начинаю работу с service bot start , top говорит, что он всегда использует не менее 100% моего процессора.

В обоих случаях bot работает как ожидалось.

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

Спасибо.

2 Solutions collect form web for “systemd, используя 100% моего процессора, если нет, если я запустил его без systemd”

Я «исправил это», поставив своего bot под screen так:

 [Unit] Description=(my description) [Service] RemainAfterExit=yes ExecStart=/usr/bin/screen -dmS bot /usr/bin/bot Restart=restart-always [Install] WantedBy=multi-user.target 

Я не знаю, почему мой процесс на экране фиксирует его высокий уровень использования ЦП, но, эй, он работает.

Проблема не находится в systemd.

Systemd запускает процесс без stdin (= / dev / null). Все системные вызовы read() завершаются немедленно (с нормальным stdin, read() блокируется до тех пор, пока не появятся новые данные). В обычной практике read() вызывается в недостроенном цикле, что приводит к огромному использованию ЦП. Чтобы подтвердить это, попробуйте подключиться к запущенному процессу с помощью strace -p <pid> .

Процесс должен быть адаптирован для запуска без stdin или использования некоторых оболочек, таких как предложенная команда screen или nohup

  • Модуль iptables не загружен после обновления Ubuntu с 14.04 по 16.04
  • unicorn + systemd: проигрывание регистрации после обновления единорога
  • Проблема сценария службы Yocto linux
  • Каков правильный способ написать правило udev, чтобы остановить службу в systemd
  • Есть ли способ автоматически перезапустить докер после обновления правил брандмауэра с помощью iptables?
  • Может ли зависимость systemd применяться только к действию «ExecStart» устройства?
  • Вкус initrd
  • Что необходимо для минимальной загрузки systemd для запуска getty на виртуальной консоли?
  • systemd: как распечатать конфигурацию по умолчанию для службы?
  • Запустить сервис с другой конфигурацией
  • Можно ли уменьшить размер хранимого формата systemd-journald (и, соответственно, размер)?
  • Linux и Unix - лучшая ОС в мире.