GNU/Linux >> Linux Esercitazione >  >> Linux

Come scrivere uno script di avvio per Systemd?

Ho 2 schede grafiche sul mio laptop. Uno è IGP e un altro discreto.

Ho scritto uno script di shell per disattivare la scheda grafica discreta.

Come posso convertirlo in script di sistema per eseguirlo all'avvio?

Risposta accettata:

Esistono principalmente due approcci per farlo:

  • Se devi eseguire uno script, non lo converti ma esegui piuttosto lo script tramite un systemd servizio.

Quindi hai bisogno di due file:lo script e il .service file (file di configurazione dell'unità).
Assicurati che lo script sia eseguibile e che la prima riga (shebang ) è #!/bin/sh . Quindi crea il .service file in /etc/systemd/system (un semplice file di testo, chiamiamolo vgaoff.service ).
Ad esempio:

  1. lo script:/usr/bin/vgaoff
  2. il file dell'unità:/etc/systemd/system/vgaoff.service

Ora, modifica il file dell'unità. Il suo contenuto dipende da come funziona il tuo script:

Se vgaoff spegne semplicemente la gpu, ad esempio:

exec blah-blah pwrOFF etc 

quindi il contenuto di vgaoff.service dovrebbe essere:

[Unit]
Description=Power-off gpu

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

[Install]
WantedBy=multi-user.target

Se vgaoff viene utilizzato per spegnere la GPU e anche per riaccenderla, ad esempio:

start() {
  exec blah-blah pwrOFF etc
}

stop() {
  exec blah-blah pwrON etc
}

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

quindi il contenuto di vgaoff.service dovrebbe essere:

[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
  • Per i casi più banali, puoi fare a meno dello script ed eseguire direttamente un determinato comando:

Per spegnere:

[Unit]
Description=Power-off gpu

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

[Install]
WantedBy=multi-user.target

Per spegnere e riaccendere:

[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

Una volta che hai finito con i file, abilita il servizio:

systemctl enable vgaoff.service

Si avvierà automaticamente al prossimo avvio. Puoi anche abilitare e avviare il servizio in una volta sola con

systemctl enable --now vgaoff.service

a partire da systemd v.220 (su configurazioni precedenti dovrai avviarlo manualmente).
Per maggiori dettagli, consulta systemd.service pagina manuale.

Risoluzione dei problemi .
Inizia qui:
Come visualizzare il registro completo di un systemd servizio?
systemd codici di uscita del servizio e spiegazione delle informazioni sullo stato


Linux
  1. Come cambiare utente per un mucchio di file di servizio Systemd?

  2. Come configurare Systemd per trasformare un semplice script con Standardio in un servizio di rete?

  3. Come confezionare un servizio Systemd?

  4. Come impostare i valori ulimit per un servizio systemd

  5. Come eseguire uno script di shell all'avvio

Come scrivere uno script Bash con esempi

Come eseguire lo script della shell come servizio Systemd in Linux

Come scrivere uno script di shell in Ubuntu

Come configurare l'esecuzione automatica di uno script Python utilizzando Systemd

Come eseguire lo script della shell come servizio SystemD in Linux

Come limitare la memoria per un servizio gestito da systemd