LINUX.ORG.RU
решено ФорумAdmin

Ошибка запуска юнита в Debian 8

 


0

1

Нужна помощь.

Не запускается юнит:

[Unit]
Description=неважно
Requires=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/mybin
Restart=always
RestartSec=10
TimeoutSec=10

[Install]
WantedBy=graphical.target

Ошибка следующая:

mybin.service holdoff time over, scheduling restart

мне нужно интегрировать бинарь в эту систему, поэтому

[Install]
WantedBy=graphical.target

не мое художество, сделать

systemctl set-default target multi-user

я не могу, ЕСЛИ вдруг кто-то об этом решит мне сказать.

А, и конечно же, руками все взлетает.

Тем, кому предстоит

Я накосячил. Мой бинарь - демон, т.е. форкается.

По правилам игры systemd нужно сделать в unit-е пометку о pid-e предка, что бы systemd мог убивать.

В общем я сделал обертку над бинарем, шелл скрипт, котором вызываю бинарь, далее с помощью pidof mybin получаю pid, далее этот pid пихаю в файл /var/run/mybin.pid

А в mybin.service в секции Service добавьте поле PIDFile=/var/run/mybin.pid и в ExecStart напишите путь до шелл скрипта.

Спасибо за внимание.

OrdinaryMind ()
Ответ на: Тем, кому предстоит от OrdinaryMind

pidof — это ненадёжно. Что если в системе вдруг будет более одного экземпляра mybin?

По правилам игры systemd нужно сделать в unit-е пометку о pid-e предка, что бы systemd мог убивать.

Это необязательно. systemd в большинстве случаев сам умеет определять PID твоего демона, даже если он форкается.

Как именно форкается твой демон? Есть полный лог неуспешного запуска?

intelfx ★★★★★ ()
Ответ на: комментарий от intelfx

исключен 2-ой экземпляр, но я не придумал ничего лучше pidof

исключен, т.к. бинарь перед форком читает с платы PCI данные, если считал, затирает память и форкается по классике через fork() с проверкой PID-a.

логов от systemctl нет, а из-за того что у меня Restart=always journalctl -f показывает всегда одно и тоже:

Starting mybin.service
mybin.service holdoff time over, scheduling restart
Stopping mybin.service

логов у бинаря практически нет, бинарь-тихоня, там тупо да-запустился, нет-не запустился

я прочитал что если Type=forking то мастхэв PIDFile=/path, сделал - заработало, ессна обрадовался.

OrdinaryMind ()