Как написать сценарий запуска для systemd

У меня есть 2 видеокарты на моем ноутбуке. Один из них - IGP, а другой - дискретный.

Я написал сценарий оболочки, чтобы отключить дискретную графическую карту.

Как я могу преобразовать его в скрипт systemd, чтобы запустить его при запуске?

196 голосов | спросил Sharique 10 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 10 Sep 2012 14:01:53 +0400 2012, 14:01:53

1 ответ


275

В основном есть два подхода:

  • Если вам нужно запустить скрипт, вы его не конвертируете, а запускаете скрипт через службу systemd .

Поэтому вам нужны два файла: сценарий и файл .service (файл конфигурации устройства).
Убедитесь, что ваш скрипт является исполняемым, а первая строка ( shebang ) - #! /Bin /sh . Затем создайте файл .service в /etc /systemd /system (простой текстовый файл, назовем его vgaoff.service ).
Например:

  1. сценарий: /usr /bin /vgaoff
  2. файл устройства: /etc/systemd/system/vgaoff.service

Теперь отредактируйте файл блока. Его содержание зависит от того, как работает ваш скрипт:

Если vgaoff просто отключает gpu, например:

  exec blah-blah pwrOFF и т. д.
 

, тогда содержимое vgaoff.service должно быть:

  [Unit]
Описание = Отключение gpu

[Обслуживание]
Тип = OneShot
ExecStart = /USR /бен /vgaoff

[Установить]
WantedBy = multi-user.target
 

Если для выключения GPU используется vgaoff , а также для включения питания, например:

  start () {
  exec blah-blah pwrOFF и т. д.
}

стоп() {
  exec blah-blah pwrON и т. д.
}

дело $ 1 в
  start | stop) "$ 1" ;;
ESAC
 

, тогда содержимое vgaoff.service должно быть:

  [Unit]
Описание = Отключение gpu

[Обслуживание]
Тип = OneShot
ExecStart = /usr /bin /vgaoff start
ExecStop = остановка /usr /bin /vgaoff
RemainAfterExit = да

[Установить]
WantedBy = multi-user.target
 
  • Для самых тривиальных случаев вы можете обойтись без скрипта и выполнить определенную команду напрямую:

Чтобы отключить питание:

  [Unit]
Описание = Отключение gpu

[Обслуживание]
Тип = OneShot
ExecStart = /bin /sh -c "echo OFF> /whatever /vga_pwr_gadget /switch"

[Установить]
WantedBy = multi-user.target
 

Для выключения и включения:

  [Unit]
Описание = Отключение gpu

[Обслуживание]
Тип = OneShot
ExecStart = /bin /sh -c "echo OFF> /whatever /vga_pwr_gadget /switch"
ExecStop = /bin /sh -c "echo ON> /whatever /vga_pwr_gadget /switch"
RemainAfterExit = да

[Установить]
WantedBy = multi-user.target
 

Как только вы закончите работу с файлами, включите службу:

  systemctl включить vgaoff.service
 

Он должен запускаться автоматически после перезагрузки машины.


Подробнее см. systemd.service man.

ответил don_crissti 10 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 10 Sep 2012 19:21:34 +0400 2012, 19:21:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132