Автозапуск с systemd

Автор maltsevvv, 31 июля 2018, 15:03:54

« назад - далее »

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

maltsevvv

Пытаюсь настроить авматический запуск скрипта через 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

ferum

Цитата: maltsevvv от 31 июля 2018, 15:03:54Подскажите, плз, что нужно исправить в сервисном файле?
Определённо нижнюю строчку.
По идее при активации юнита тупо создаётся линк в /lib/systemd/system что в принципе можно сделать и ручками но это не по феншую.
Русские дебианщики против цифрового слабоумия !

maltsevvv

#2
Так-как "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

Цитата: ferum от 31 июля 2018, 20:22:59Определённо нижнюю строчку.

Сейчас файл такого содержания:
[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


Вроде работает, но криво как-то(см. предыдущее сообщение)

ChubaDuba

#3
Чтобы всё работало, нужно создать два одноимённых файла. Один у вас будет бла-бла-бла.service, второй бла-бла-бла.timer.
В первом вы описываете действие, во втором описываете когда и с какой периодичностью должен запускаться одноимённый сервис.
Сохраняете всё это хозяйство в /lib/systemd/system и всё у вас заработает должным образом.
Тут подробно.

maltsevvv

Мне нужно, чтобы сервис отрабатывал один раз, при запуске системы.

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

Ogis1975

Цитата: maltsevvv от 02 августа 2018, 15:54:47
Мне нужно, чтобы сервис отрабатывал один раз, при запуске системы.

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

ferum

По чему вы настаиваете на graphical.target ? По чему не display-manager.service ?
systemctl daemon-reload
делаете?
Русские дебианщики против цифрового слабоумия !

maltsevvv

#7
Цитата: ferum от 02 августа 2018, 16:53:43По чему вы настаиваете на graphical.target ? По чему не display-manager.service ?
Это не принципиально. Так как notify-send, отрабатывает только при запущенном графическом окружении, я просто выбрал один из последних запускаемых сервисов(systemd-analyze plot) и добавил 15-ти секундный слип в скрипте.
И да, после редактирования сервис-файла нужно делать daemon-reload. Я это знаю.

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

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

Cообщение объединено 02 августа 2018, 20:05:27

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

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

ferum

Цитата: maltsevvv от 02 августа 2018, 19:53:47И еще, у меня в системе отсутствует 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

Цитата: maltsevvv от 02 августа 2018, 19:53:47можно запустить монотонный таймер, который будет срабатывать после запуска и выставить OnUnitActiveSec=1
Кроме OnUnitActiveSec= есть OnBootSec=, OnStartupSec=, OnUnitActiveSec=, OnUnitInactiveSec= и т.д.
С помощью systemd.timer всё можно гибко настроить как вам нужно. Вот ещё полезная ссылочка, которая может быть вам полезной.

maltsevvv

Большое спасибо, за ссылки и советы.
Тему закрываю.


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