GNU/Linux >> Znalost Linux >  >> Linux

Jak napsat spouštěcí skript pro Systemd?

V notebooku mám 2 grafické karty. Jeden je IGP a druhý diskrétní.

Napsal jsem skript shellu pro vypnutí samostatné grafické karty.

Jak jej mohu převést na skript systemd, aby se spustil při spuštění?

Přijatá odpověď:

Existují dva způsoby, jak toho dosáhnout:

  • Pokud musíte spustit skript, nepřevádíte jej, ale spouštíte skript prostřednictvím systemd služby.

Proto potřebujete dva soubory:skript a .service soubor (soubor konfigurace jednotky).
Ujistěte se, že váš skript je spustitelný a první řádek (shebang ) je #!/bin/sh . Poté vytvořte .service soubor v /etc/systemd/system (soubor ve formátu prostého textu, říkejme mu vgaoff.service ).
Například:

  1. skript:/usr/bin/vgaoff
  2. soubor jednotky:/etc/systemd/system/vgaoff.service

Nyní upravte soubor jednotky. Jeho obsah závisí na tom, jak váš skript funguje:

Pokud vgaoff pouze vypne gpu, např.:

exec blah-blah pwrOFF etc 

pak obsah vgaoff.service by mělo být:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff

[Install]
WantedBy=multi-user.target

Pokud vgaoff se používá k vypnutí GPU a také k jeho opětovnému zapnutí, např.:

start() {
  exec blah-blah pwrOFF etc
}

stop() {
  exec blah-blah pwrON etc
}

case $1 in
  start|stop) "$1" ;;
esac

pak obsah vgaoff.service by mělo být:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff start
ExecStop=/usr/bin/vgaoff stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
  • V nejtriviálnějších případech se můžete obejít bez skriptu a provést určitý příkaz přímo:

Vypnutí:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"

[Install]
WantedBy=multi-user.target

Vypnutí a zapnutí:

[Unit]
Description=Power-off gpu

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
ExecStop=/bin/sh -c "echo ON > /whatever/vga_pwr_gadget/switch"
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Až budete se soubory hotovi, povolte službu:

systemctl enable vgaoff.service

Spustí se automaticky při příštím spuštění. Službu můžete dokonce povolit a spustit najednou pomocí

systemctl enable --now vgaoff.service

od systemd v.220 (u starších nastavení jej budete muset spustit ručně).
Další podrobnosti viz systemd.service manuálová stránka.

Odstraňování problémů .
Začněte zde:
Jak zobrazit úplný protokol systemd služby?
systemd kódy ukončení služby a vysvětlení stavových informací


Linux
  1. Spravujte spouštění pomocí systemd

  2. Jak vytvořit službu Systemd v Linuxu

  3. Jak nakonfigurovat Systemd tak, aby jednoduchý skript pomocí Standardio převedl do síťové služby?

  1. Jak zabalit službu Systemd?

  2. Jak nastavit hodnoty ulimit pro službu systemd

  3. Jak omezit paměť pro službu spravovanou systemd

  1. Linux – umístění skriptu Fsck?

  2. Jak změnit uživatele pro spoustu souborů služby Systemd?

  3. Jak spustit skript shellu při spuštění