LINUX.ORG.RU

Выполнить команду при включении/выключении и засыпании/пробуждении системы

 


1

1

В какие места можно кинуть скрипт/команду, чтобы они исполнялись при выключении/включении и перед ждущим/спящим режимами и после выхода из них? Кидал в /etc/rc.local, /etc/default/hal, /etc/pm/sleep.d/ и /usr/lib/pm-utils/sleep.d - не работает. Выполнить нужно две команды

ddccontrol -r 0xe1 -w 0 dev:/dev/i2c-1
ddccontrol -r 0xe1 -w 1 dev:/dev/i2c-1
Может я что не так делаю. Kubuntu 16.04

★★

Последнее исправление: KOT040188 (всего исправлений: 6)

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

При этом sudo /usr/bin/ddccontrol -r 0xe1 -w 0 dev:/dev/i2c-1 работает!

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

Спасибо, теперь sudo systemctl restart monitor.service работает. Забыв рааскоментироват вторую строчку в сериале усыпить систему. Проснуться она не смогла, несколько раз жал на кнопку - мигалки лампочками и тишина. Наконец запуск с нуля и синеющий курсор на чёрном фоне…

KOT040188 ★★
() автор топика

В общем наверное звёзды сошлись. Система грузится нормально, из сна выходит нормально пока. Только вот скрипт не работает. А sudo systemctl restart monitor.service работает. Before=shutdown.target reboot.target halt.target - где здесь про ждущий режим?

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

https://habrahabr.ru/company/centosadmin/blog/255845/]Почитал. Сделал так:

[Unit]
 Before=shutdown.targett
 Before=reboot.target
 Before=halt.target
   
[Service]
 Type=oneshot
 ExecStart=/usr/bin/ddccontrol -r 0xe1 -w 0 dev:/dev/i2c-1
 RemainAfterExit=yes

[Install]
WantedBy=shutdown.target
kot@kot-MS-7930:~$ systemctl status monitor.service
● monitor.service                                                                                                                                        
   Loaded: loaded (/etc/systemd/system/monitor.service; enabled; vendor preset: enabled)                                                                 
   Active: inactive (dead)                                                                                                                               
                                                                                                                                                         
Ліп 20 23:57:44 kot-MS-7930 systemd[1]: [/etc/systemd/system/monitor.service:2] Failed to add dependency on shutdown.targett, ignoring: Invalid argument

KOT040188 ★★
() автор топика

Долго и упорно вкуривал гугла и пришёл к такому скрипту:

[Unit]
 Before=hibernate.target
 Before=hybrid-sleep.target
 Before=suspend.target
 Before=shutdown.target
   
[Service]
 Type=oneshot
 ExecStart=/usr/bin/ddccontrol -r 0xe1 -w 0 dev:/dev/i2c-1
 RemainAfterExit=yes

[Install]
WantedBy=shutdown.target

kot@kot-MS-7930:~$ systemctl status monitor.service
● monitor.service
   Loaded: loaded (/etc/systemd/system/monitor.service; enabled; vendor preset: enabled)
   Active: active (exited) since Чцв 2016-07-21 00:52:33 MSK; 42s ago
 Main PID: 1846 (code=exited, status=0/SUCCESS)

Ліп 21 00:52:33 kot-MS-7930 ddccontrol[1846]: using a basic generic profile. Many controls will not be supported, and
Ліп 21 00:52:33 kot-MS-7930 ddccontrol[1846]: some controls may not work as expected.
Ліп 21 00:52:33 kot-MS-7930 ddccontrol[1846]: Please update ddccontrol-db, or, if you are already using the latest
Ліп 21 00:52:33 kot-MS-7930 ddccontrol[1846]: version, please send the output of the following command to
Ліп 21 00:52:33 kot-MS-7930 ddccontrol[1846]: ddccontrol-users@lists.sourceforge.net:
Ліп 21 00:52:33 kot-MS-7930 ddccontrol[1846]: LANG= LC_ALL= ddccontrol -p -c -d
Ліп 21 00:52:33 kot-MS-7930 ddccontrol[1846]: Thank you.
Ліп 21 00:52:33 kot-MS-7930 ddccontrol[1846]: =============================== WARNING ===============================
Ліп 21 00:52:33 kot-MS-7930 ddccontrol[1846]: Записываю 0xe1, 0x00(0)...
Ліп 21 00:52:33 kot-MS-7930 systemd[1]: Started monitor.service.

Но монитор так и не выключается… У меня сомнения по поводу последней секции… Причём sudo systemctl restart monitor.service выключает монитор.

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

Если sudo systemctl restart monitor.service выключает монитор, значит дело в секции [Unit]. Или в секции [Service], её назначение не понял. У меня закончились идеи…

KOT040188 ★★
() автор топика
Последнее исправление: KOT040188 (всего исправлений: 1)
[Unit]
 Before=hibernate.target
 Before=hybrid-sleep.target
 Before=suspend.target
 Before=shutdown.target
 Before=sleep.target
   
[Service]
 Type=oneshot
 ExecStart=/usr/bin/ddccontrol -r 0xe1 -w 0 dev:/dev/i2c-1
 RemainAfterExit=yes

[Install]
WantedBy=shutdown.target
WantedBy=hibernate.target
WantedBy=hybrid-sleep.target
WantedBy=suspend.target

Хоть ты тресни, не работает.

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

Я смотрю все файлы устройств пересоздаются после перезагрузки. Может в этом дело?

KOT040188 ★★
() автор топика

Кидать исполняемый скрипт в /usr/lib/systemd/system-sleep. Первый аргумент будет или pre, или post. Юнит писать не нужно.

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

зашел глянуть - у вас тут еще продолжаются эксперименты :) Совет от intelfx оказался вообще простым, ему большое спасибо. У тебя под убунтой путь скорее всего такой:

/lib/systemd/system-sleep

внутри этого каталого создаешь файл например monitor.sh. При suspend или hibernate он будет автоматически вызыватся с аргументом pre при засыпании и post при пробуждении

#!/bin/sh
case $1/$2 in
  pre/*)
    /usr/bin/ddccontrol dev:/dev/i2c-1 -r 0xd6 -w 4
    ;;
  post/*)
    /usr/bin/ddccontrol dev:/dev/i2c-1 -r 0xd6 -w 1
    ;;
esac

потестировать

systemctl suspend

Важно: сделать его исполняемым sudo chmod a+x monitor.sh-

У меня работает при suspend

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

Нет у меня такого каталога. Создать?

kot@kot-MS-7930:/usr/lib/systemd$ ls
boot  catalog  network  user  user-generators
А для выключения/включения системы И спящего режима?

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

нет, не создавать. Блин, так то конечно мучение, что на разных системах :) Поищи ее

sudo find  / -type d -name system-shutdown

я потестил и с hibernate и suspend - все пашет

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

Я не понял, речь же шла про каталог system-sleep… Нашёл /lib/systemd/system-shutdown, есть и /lib/systemd/system-sleep… Куда лучше положить скрипт? В оба? А для выключения/включения системы?
//мысли вслух// Да, линукс во всей красе. Ну ладно, множество дистрибутивов это разнообразие, у них разные цели (про распыление ресурсов я помолчу). Но внутри-то должны быть жёсткие стандарты (в нормальной параллельной вселенной). Во всяком случае я не понимаю почему внутри все дистрибутивы должны быть настолько разными при том, что используют в большинстве случаев одно и тоже ПО…

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

БЛИН, опять неправильно сказал

/lib/systemd/system-sleep

отвлекаюсь постоянно... Это точно она, и сделай как я выше описал

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

да, и различия только увеличиваются. Никто не хочет прийти в общему знаменателю. Вот опят убунута разработала snap-пакеты, редхат же flatpack

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

Ви таки будете смеяться - нет.

#!/bin/sh
case $1/$2 in
  pre/*)
    ExecStart=/usr/bin/ddccontrol -r 0xe1 -w 0 dev:/dev/i2c-1
    ;;
  post/*)
    ExecStart=/usr/bin/ddccontrol -r 0xe1 -w 1 dev:/dev/i2c-1
    ;;
esac

Исполняемым сделал. Кликаю на него в фм и ничего…

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

не, на него кликать не надо, он и не может так запуститься - это же не винда. Это очень хорошо, поэтому линукс и непробиваемый. Только сделать ОБЯЗАТЕЛЬНО его исполняемым и он запуститься автоматически.

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

нет, это уже НЕ юнит systemd. Это обычный скрипт

#!/bin/sh
case $1/$2 in
  pre/*)
   /usr/bin/ddccontrol -r 0xe1 -w 0 dev:/dev/i2c-1
    ;;
  post/*)
    /usr/bin/ddccontrol -r 0xe1 -w 0 dev:/dev/i2c-1
    ;;
esac

это скрипт с окончанием sh. Его надо ОБЯЗАТЕЛЬНО сделать исполняемым и просто положить в директорию.

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

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

Я про автозапуск вначале и написал. Ну не работает он. Уже после неудачи проверил в фм. Ещё идеи? Уже смешно становится… Истерический смех… Может перезагрузиться?

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

ну как обычно делают тестировщики - сначала одну строку проверить в терминале (мой монитор)

sudo  /usr/bin/ddccontrol dev:/dev/i2c-1 -r 0xd6 -w 4

работает - это уже 50 процентов успеха. Теперь запустить в терминале сам скрипт с аргументом pre

sudo /lib/systemd/system-sleep/monitor.sh  pre

и тут посмотреть на ошибки

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

Првый вариант я постоянно проверяю. Он работает.

kot@kot-MS-7930:/usr/lib/systemd$ sudo /lib/systemd/system-sleep/monitor.sh  pre
[sudo] пароль для kot: 
sudo: unable to execute /lib/systemd/system-sleep/monitor.sh: No such file or directory
kot@kot-MS-7930:/lib/systemd/system-sleep$ ls
hdparm  monitor.sh  wpasupplicant

???? Смешно.

KOT040188 ★★
() автор топика
Последнее исправление: KOT040188 (всего исправлений: 3)
Ответ на: комментарий от jtad

Обновил предыдущее сообщение. Это за пределами моего понимания…

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

это не мучение, в этом вся прелесть - линух в принципе непробиваем

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

Правда делал в графике. Ну мне так удобней.

kot@kot-MS-7930:/lib/systemd/system-sleep$ ls -la /lib/systemd/system-sleep/monitor.sh
-rwxr-xr-x 1 root root 197 Ліп 21 22:39 /lib/systemd/system-sleep/monitor.sh

KOT040188 ★★
() автор топика
Последнее исправление: KOT040188 (всего исправлений: 2)
Ответ на: комментарий от jtad

АА момент, запости сюда содержание скрипта. Это сообщение относится наверно к команде. Наверно внутри скрипта пути неверные

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

переименовал руками и ничего.

kot@kot-MS-7930:/lib/systemd/system-sleep$ sudo /lib/systemd/system-sleep/monitor.sh pre
[sudo] пароль для kot: 
sudo: unable to execute /lib/systemd/system-sleep/monitor.sh: No such file or directory

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

может в бубне по другому попробуй перейт в директорию

cd /lib/systemd/system-sleep

и так запустить


sudo ./monitor.sh
jtad
()
Ответ на: комментарий от KOT040188

да нет, это же не юнит, это скрипт. Убрать все ExecStart

#!/bin/sh
case $1/$2 in
  pre/*)
    /usr/bin/ddccontrol -r 0xe1 -w 0 dev:/dev/i2c-1
    ;;
  post/*)
    /usr/bin/ddccontrol -r 0xe1 -w 1 dev:/dev/i2c-1
    ;;
esac

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

Блин, у меня были подозрения, что ругается не на сам скрипт, а на то что внутри. Сейчас не найду и не вспомню, но когда-то давно читал, про уопротый случай: консоль ругалась на отсутствие файла, но какого именно внутри скрипта или снаружи, непонятно - такая бага-фича консоли. Где-то на хабре было, чувак ошибку отлавливал, такой срач был…

KOT040188 ★★
() автор топика
Последнее исправление: KOT040188 (всего исправлений: 1)
Ответ на: комментарий от KOT040188
#!/bin/sh
case $1/$2 in
  pre/*)
    /usr/bin/ddccontrol -r 0xe1 -w 0 dev:/dev/i2c-1
    ;;
  post/*)
    /usr/bin/ddccontrol -r 0xe1 -w 1 dev:/dev/i2c-1
    ;;
esac

kot@kot-MS-7930:/lib/systemd/system-sleep$ sudo ./monitor.sh pre
sudo: unable to execute ./monitor.sh: No such file or directory
KOT040188 ★★
() автор топика
Последнее исправление: KOT040188 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.