Comment écrire un script de démarrage pour systemd

J'ai 2 maps charts sur mon ordinateur portable. L'un est IGP et un autre discret.

J'ai écrit un script shell pour désactiver la carte graphique discrète.

Comment puis-je le convertir en script systemd pour l'exécuter au démarrage?

Il y a principalement deux approches pour le faire:

  • Si vous devez exécuter un script, vous ne le convertissez pas mais exécutez plutôt le script via un service systemd .

Par conséquent, vous avez besoin de deux files: le script et le file .service (file de configuration de l'unité).
Assurez-vous que votre script est exécutable et que la première ligne (le shebang ) est #!/bin/sh . Ensuite, créez le file .service dans /etc/systemd/system (un file text brut, appelons-le vgaoff.service ).
Par exemple:

  1. le script: /usr/bin/vgaoff
  2. le file unité: /etc/systemd/system/vgaoff.service

Maintenant, éditez le file d'unité. Son contenu dépend du fonctionnement de votre script:

Si vgaoff simplement le GPU, par exemple:

 exec blah-blah pwrOFF etc 

alors le contenu de vgaoff.service devrait être:

 [Unit] Description=Power-off gpu [Service] Type=oneshot ExecStart=/usr/bin/vgaoff [Install] WantedBy=multi-user.target 

Si vgaoff est utilisé pour éteindre le GPU et pour le rallumer, par exemple:

 start() { exec blah-blah pwrOFF etc } stop() { exec blah-blah pwrON etc } case $1 in start|stop) "$1" ;; esac 

alors le contenu de vgaoff.service devrait être:

 [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 
  • Pour les cas les plus sortingviaux, vous pouvez vous passer du script et exécuter directement une certaine command:

Pour éteindre:

 [Unit] Description=Power-off gpu [Service] Type=oneshot ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch" [Install] WantedBy=multi-user.target 

Pour éteindre et allumer:

 [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 

Une fois que vous avez terminé avec les files, activez le service:

 systemctl enable vgaoff.service 

Il devrait démarrer automatiquement après le redémarrage de la machine.


Pour plus de détails, voir la page de manuel systemd.service .