GNU/Linux >> Tutoriels Linux >  >> Linux

Comment écrire un script de démarrage pour Systemd ?

J'ai 2 cartes graphiques sur mon portable. L'un est IGP et l'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 ?

Réponse acceptée :

Il existe 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 systemd services.

Il vous faut donc deux fichiers :le script et le .service file (fichier de configuration de l'unité).
Assurez-vous que votre script est exécutable et que la première ligne (le shebang ) est #!/bin/sh . Créez ensuite le .service fichier dans /etc/systemd/system (un fichier texte brut, appelons-le vgaoff.service ).
Par exemple :

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

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

Si vgaoff éteint simplement le gpu, par exemple :

exec blah-blah pwrOFF etc 

puis 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 aussi pour le rallumer, par exemple :

start() {
  exec blah-blah pwrOFF etc
}

stop() {
  exec blah-blah pwrON etc
}

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

puis 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 triviaux, vous pouvez vous passer du script et exécuter directement une certaine commande :

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 rallumer :

[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 fichiers, activez le service :

systemctl enable vgaoff.service

Il démarrera automatiquement au prochain démarrage. Vous pouvez même activer et démarrer le service en une seule fois avec

systemctl enable --now vgaoff.service

depuis systemd v.220 (sur les anciennes configurations, vous devrez le démarrer manuellement).
Pour plus de détails, voir systemd.service page de manuel.

Dépannage .
Commencez ici :
Comment voir le journal complet d'un systemd service ?
systemd codes de sortie de service et explication des informations d'état


Linux
  1. Comment créer un service Systemd sous Linux

  2. Comment configurer Systemd pour transformer un script simple avec Standardio dans un service réseau ?

  3. Comment exécuter un script shell au démarrage

  4. Comment limiter la mémoire pour un service géré par systemd

  5. Comment exécuter un script avec systemd juste avant l'arrêt ?

Comment écrire un script bash avec des exemples

Comment exécuter un script Shell en tant que service Systemd sous Linux

Comment écrire un script shell dans Ubuntu

Comment configurer l'exécution automatique d'un script Python à l'aide de Systemd

Comment exécuter un script Shell en tant que service SystemD sous Linux

Comment exécuter un script avant tout le reste à l'arrêt avec systemd ?