debian.org / О Debian Где взять Debian Поддержка Уголок разработчика Новости Wiki

Автор Тема: Автозапуск с systemd  (Прочитано 1849 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн maltsevvv

  • Пользователь
  • *
  • Topic Author
  • Сообщений: 10
Автозапуск с systemd
« : 31 Июль 2018, 15:03:54 »
Пытаюсь настроить авматический запуск скрипта через systemd, который должен выводить уведомление после запуска системы.
Система: Дебиан 9+Гном

Путь к скрипту:
/usr/local/sbin/test_notyfi.sh
Содержимое:
#!/bin/bash
su user -c $"notify-send \"TEST:\" \"test notyfi-send\""
Путь к сервисному файлу:
/etc/systemd/system/test_notyfi.service
Содержимое:
[Unit]
Description=Test notyfi
After=systemd-user-sessions.service
Requires=gdm.service
[Service]
Type=forking
TimeoutSec=30
ExecStart=/usr/local/sbin/test_notyfi.sh
[Install]
WantedBy=graphical.target
Проблема в том, что сервис правильно отрабатывает только при ручном запуске и рестарте.
После перезагрузки системы уведомление не появляется.
Подскажите, плз, что нужно исправить в сервисном файле?

С уважением Виктор


Cообщение объединено 31 Июль 2018, 16:11:16
...и задержка почему-то не срабатывает.
systemd-analyze plot, показывает, что сервис срабатывает сразу-же после запуска graphical.target
« Последнее редактирование: 01 Август 2018, 03:57:47 от ogost »
 

Оффлайн ferum

  • Ветеран
  • *****
  • Сообщений: 3363
  • Buster TDE & Buster LXDE & stretch KDE
Re: Автозапуск с systemd
« Ответ #1 : 31 Июль 2018, 20:22:59 »
Подскажите, плз, что нужно исправить в сервисном файле?
Определённо нижнюю строчку.
По идее при активации юнита тупо создаётся линк в /lib/systemd/system что в принципе можно сделать и ручками но это не по феншую.
Русские дебианщики против цифрового слабоумия !
 

Оффлайн maltsevvv

  • Пользователь
  • *
  • Topic Author
  • Сообщений: 10
Re: Автозапуск с systemd
« Ответ #2 : 01 Август 2018, 00:20:51 »
Так-как "Type=forking", добавил указание на pid-файл(PIDFile=/var/log/checksum.pid).
Теперь все работает как надо, но показывает ошибку "Failed to read PID from file /var/log/checksum.pid: Invalid argument".

$ sudo systemctl status test_notyfi
[sudo] пароль для user:
● test_notyfi.service - Check boot files
   Loaded: loaded (/etc/systemd/system/test_notyfi.service; enabled; vendor preset: enabled)
   Active: [color=red]failed[/color] (Result: resources) since Tue 2018-07-31 23:54:46 MSK; 33s ago
  Process: 1298 ExecStart=/usr/local/sbin/test_notyfi.sh start (code=exited, status=0/SUCCESS)
      CPU: 772ms

июл 31 23:54:08 hp260 systemd[1]: Starting Check boot files...
июл 31 23:54:33 hp260 su[1393]: Successful su for user by root
июл 31 23:54:33 hp260 su[1393]: + ?? root:user
июл 31 23:54:33 hp260 su[1393]: pam_unix(su:session): session opened for user user by (uid=0)
июл 31 23:54:46 hp260 test_notyfi.sh[1298]: Test notyfi
июл 31 23:54:46 hp260 systemd[1]: test_notyfi.service: Failed to read PID from file /var/log/checksum.pid: Invalid argument
июл 31 23:54:46 hp260 systemd[1]: [color=red]Failed to start Test notyfi.[/color]
июл 31 23:54:46 hp260 systemd[1]: test_notyfi.service: Unit entered failed state.
июл 31 23:54:46 hp260 systemd[1]: test_notyfi.service: Failed with result 'resources'.
Если убираю "PIDFile=/var/log/checksum.pid", notify-send не отрабатывает, да и вообще сервис не запускается.
Команда "systemctl start test_notyfi" - трабатывает нормально. Но после перезагрузки опять ничего не работает.
Тупизм какой-то!
За сегодня, уже раз 100 наверное перезагружался.


Cообщение объединено 01 Август 2018, 00:27:04
Определённо нижнюю строчку.

Сейчас файл такого содержания:[b][Unit][/b]
Description=Test notyfi
After=graphical.target
[b][Service][/b]
Type=forking
ExecStart=/usr/local/sbin/test_notyfi.sh
PIDFile=/var/log/checksum.pid
RemainAfterExit=yes
TimeoutSec=300
[b][Install][/b]
WantedBy=graphical.target

Вроде работает, но криво как-то(см. предыдущее сообщение)
« Последнее редактирование: 01 Август 2018, 03:59:17 от ogost »
 

Оффлайн ChubaDuba

  • Старожил
  • ****
  • Сообщений: 517
  • Debian 9 + Xmonad
  • Jabber: achubakov@jabber.ru
Re: Автозапуск с systemd
« Ответ #3 : 01 Август 2018, 19:30:09 »
Чтобы всё работало, нужно создать два одноимённых файла. Один у вас будет бла-бла-бла.service, второй бла-бла-бла.timer.
В первом вы описываете действие, во втором описываете когда и с какой периодичностью должен запускаться одноимённый сервис.
Сохраняете всё это хозяйство в /lib/systemd/system и всё у вас заработает должным образом.
Тут подробно.
« Последнее редактирование: 01 Август 2018, 19:34:56 от ChubaDuba »
 

Оффлайн maltsevvv

  • Пользователь
  • *
  • Topic Author
  • Сообщений: 10
Re: Автозапуск с systemd
« Ответ #4 : 02 Август 2018, 15:54:47 »
Мне нужно, чтобы сервис отрабатывал один раз, при запуске системы.

С уважением Виктор
 

Оффлайн Ogis1975

  • OS: Debian 9.4 / WM: Xmonad
  • Местный житель
  • ***
  • Сообщений: 429
  • Debian 9.8 xmonad
    • Мой репозиторий на Github
Re: Автозапуск с systemd
« Ответ #5 : 02 Август 2018, 16:52:38 »
Мне нужно, чтобы сервис отрабатывал один раз, при запуске системы.

С уважением Виктор
Так ведь вам ссылку дали. Читайте.
Цитировать
во втором описываете когда и с какой периодичностью должен запускаться одноимённый сервис.
 

Оффлайн ferum

  • Ветеран
  • *****
  • Сообщений: 3363
  • Buster TDE & Buster LXDE & stretch KDE
Re: Автозапуск с systemd
« Ответ #6 : 02 Август 2018, 16:53:43 »
По чему вы настаиваете на graphical.target ? По чему не display-manager.service ?
systemctl daemon-reloadделаете?
Русские дебианщики против цифрового слабоумия !
 

Оффлайн maltsevvv

  • Пользователь
  • *
  • Topic Author
  • Сообщений: 10
Re: Автозапуск с systemd
« Ответ #7 : 02 Август 2018, 19:53:47 »
По чему вы настаиваете на graphical.target ? По чему не display-manager.service ?
Это не принципиально. Так как notify-send, отрабатывает только при запущенном графическом окружении, я просто выбрал один из последних запускаемых сервисов(systemd-analyze plot) и добавил 15-ти секундный слип в скрипте.
И да, после редактирования сервис-файла нужно делать daemon-reload. Я это знаю.

С уважением Виктор.

И еще, у меня в системе отсутствует display-manager.service

Cообщение объединено 02 Август 2018, 20:05:27
Так ведь вам ссылку дали. Читайте.
Ну конечно- же я читал ссылку.
Конечно можно запустить монотонный таймер, который будет срабатывать после запуска и выставить OnUnitActiveSec=1y (все-равно рестарт системы будет чаще происходить).
Понятно, что есть разные варианты автозагрузки. Сейчас я пытаюсь разобраться с одним конкретным.

С уважением Виктор.
« Последнее редактирование: 02 Август 2018, 20:05:27 от maltsevvv »
 

Оффлайн ferum

  • Ветеран
  • *****
  • Сообщений: 3363
  • Buster TDE & Buster LXDE & stretch KDE
Re: Автозапуск с systemd
« Ответ #8 : 02 Август 2018, 20:24:10 »
И еще, у меня в системе отсутствует display-manager.service
Посмотрите внимательнее https://wiki.debian.org/DisplayManager
Например у меня KDE 5 и соответственно /lib/systemd/system/sddm.service делает линк на /etc/systemd/system/@display-manager.service
Проверяется элементарно
sudo systemctl status display-manager.service
Русские дебианщики против цифрового слабоумия !
 

Оффлайн ChubaDuba

  • Старожил
  • ****
  • Сообщений: 517
  • Debian 9 + Xmonad
  • Jabber: achubakov@jabber.ru
Re: Автозапуск с systemd
« Ответ #9 : 02 Август 2018, 21:30:11 »
можно запустить монотонный таймер, который будет срабатывать после запуска и выставить OnUnitActiveSec=1
Кроме OnUnitActiveSec= есть OnBootSec=, OnStartupSec=, OnUnitActiveSec=, OnUnitInactiveSec= и т.д.
С помощью systemd.timer всё можно гибко настроить как вам нужно. Вот ещё полезная ссылочка, которая может быть вам полезной.
 

Оффлайн maltsevvv

  • Пользователь
  • *
  • Topic Author
  • Сообщений: 10
Re: Автозапуск с systemd
« Ответ #10 : 05 Август 2018, 12:59:04 »
Большое спасибо, за ссылки и советы.
Тему закрываю.


С уважением Виктор.
 

Русскоязычное сообщество Debian GNU/Linux

Re: Автозапуск с systemd
« Ответ #10 : 05 Август 2018, 12:59:04 »


Теги:
 

Автозапуск собственного скрипта

Автор nikanofff

Ответов: 16
Просмотров: 11410
Последний ответ 23 Апрель 2016, 22:08:14
от LONER
Автозапуск в cron процесса, запускаемого через screen

Автор ANALGIN

Ответов: 0
Просмотров: 1461
Последний ответ 06 Январь 2019, 14:50:42
от ANALGIN