LINUX.ORG.RU

Автозапуск через systemctl не работает

 ,


0

1

Всем привет! Не могу разобраться с автозагрузкой через systemctl, помогите пожалуйста разобраться.

Есть небольшая самописная программа(деймон) на с++, мне нужно её добавить в автозагрузку, решил сделать это при помощи systemctl, и в итоге не чего не получается, в ручном режиме «systemctl start my_prg», все запускается, а вот автозагрузка не работает.

unit файл максимально простой, и лежит в /etc/systemd/system/my_prg.service его содержимое

[Unit]
Description=auto run script
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/home/test/my_prg/my_prg start
[Install]
WantedBy=multi-user.target
Естественно после создания файла было сделано: 1. systemctl daemon-reload 2. systemctl enable my_prg

И после перезагрузки получаю вот такой вывод по команде systemctl status my_prg:

● my_prg.service - skynet auto run script
   Loaded: loaded (/etc/systemd/system/my_prg.service; enabled; vendor preset: enable)
   Active: inactive (dead) since Sat 2020-10-03 19:38:19 MSK; 1min 44s ago
  Process: 344 ExecStart=/home/test/my_prg/my_prg start (code=exited,
 Main PID: 392 (code=exited, status=0/SUCCESS)

окт 03 19:38:19 test systemd[1]: Starting auto run script...
окт 03 19:38:19 test my_prg[344]: Starting daemon
окт 03 19:38:19 test systemd[1]: Started auto run script.
окт 03 19:38:19 test my_prg[344]: Starting daemon
окт 03 19:38:19 test systemd[1]: my_prg.service: Succeeded.'

Подскажите пожалуйста, что тут не так? Спасибо!

Ответ на: комментарий от mamkin_kakir

Это единственный вариант, с которым хотябы в ручном режиме запускается, с остальными вариантами даже через systemctl start my_prg не стартует

TheKaban
() автор топика
Ответ на: комментарий от TheKaban

так может тут дело не в системд? может быть

небольшая самописная программа(деймон) на с++

сделана через жопу? потому что системд не более чем запускалка.

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

Такое вполне возможно, но тогда не понятно почему если я делаю автозапуск другими средствами, то все ок, если я тупо пишу в консоли my_prg start, то тоже все ок, ну и как говорил systemctl start my_prg то же ок.

По идеи, если я правильно понимаю, то Type должно равняться simple, но оно не запускается в такой вариации. Возможно, при автозапуске он пытается запуститься в тот момент, когда ещё не все необходимое подгружено.Мой деймон использует mysql, и в After я пробовал прописывать mysql.service, но это не дало положительного результата.

В общем пока не пойму куда копать, что бы понять чего не хватает и почему не стартует.

Если есть идеи, буду очень признателен если их озвучите.

TheKaban
() автор топика
Ответ на: комментарий от TheKaban

Есть идея перейти на Devuan. Там с этим проще. Потому что сначала все вопят какой системд классный, а потом когда начинают реально использовать получают говен от тех гуру, у которых система грузится за 3 секунды.

anonymous
()
Ответ на: комментарий от zolden

Если речь идёт о моём деймоне, то да, он реально форкается.

TheKaban
() автор топика
Ответ на: комментарий от TheKaban

Мой деймон использует mysql, и в After я пробовал прописывать mysql.service

так пробуй его загружать в юзерспейсе. если чо, держу в курсе тупого анонимуса, ну и тебе ТС это не повредит:

After=syslog.target network.target

это еще далеко не юзерспейс для системд. тебе нужно запускать своего «демона» после graphical.target, как вариант.

зы петух на анонимусе может начать советовать openrc и написание портянок в 3 экрана, пока гента ставит обновления : )

mamkin_kakir
()

Подскажите пожалуйста, что тут не так?

Предположение номер один: execution protocol mismatch (неправильно выбран Type=). Твоя программа точно форкается дважды? Бронебойный совет: перепиши, чтобы не форкалась, и сделай Type=simple.

Мой деймон использует mysql, и в After я пробовал прописывать mysql.service

Ну так а зачем убрал? Пропиши Wants=/After= до mysql.service или как он у тебя называется в твоём дистрибутиве.

Отсюда вытекает предположение номер два: проверь и добавь зависимости (и сделай так, чтобы твой недодемон вообще хоть что-то писал в лог, например).

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от TheKaban

В общем пока не пойму куда копать, что бы понять чего не хватает и почему не стартует

Копать в сторону добавления логов и перехвата сигналов в своём демоне.

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

его «деймон» в логи не умеет, а сидеть и гадать такое себе занятие. в консоли работает, в «автозапуске» нет.

mamkin_kakir
()
Ответ на: комментарий от TheKaban

в After я пробовал прописывать mysql.service, но это не дало положительного результата

А Wants=/Requires= от MySQL добавляли?

Rootlexx ★★★★★
()

вангую, что твоей программе требуется общаться с дисплейным сервером ($DISPLAY или $WAYLAND_DISPLAY), который не доступен в момент автозагрузки. Ну или с каким-нибудь подобным ресурсом

Lrrr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.