Je voudrais exécuter un .sh
fichier en utilisant bash à la déconnexion et à l'arrêt d'Ubuntu. J'ai parcouru le Web de haut en bas et n'ai trouvé que des correctifs pour KDE et GNOME. Le script est simple, j'ai juste besoin de savoir si je peux ajouter la ligne de code au fichier "logoff / shutdown" ou si j'ai besoin de la référencer dans un autre script.
30
systemd
) pour que les gens la voient en haut.Réponses:
Pour exécuter un script lors de la déconnexion:
Ajoutez la ligne suivante:
dans le
/etc/lightdm/lightdm.conf
fichier.Vous devez redémarrer lightdm pour que cette modification prenne effet. Pour ce faire, allez dans tty1 en utilisant Ctrl+ Alt+ F1, connectez-vous avec votre nom d'utilisateur et votre mot de passe et exécutez la commande suivante:
Remarque: utilisez Ctrl+ Alt+ F7pour passer à la session graphique
Pour exécuter un script au redémarrage:
/etc/rc0.d
sudo chmod +x K99_script
K99
pour s'exécuter au bon moment.Pour exécuter un script à l'arrêt:
/etc/rc6.d
sudo chmod +x K99_script
K99
pour s'exécuter au bon moment.Sources:
la source
K
«Kill» etS
«Start».K
pour les niveaux d'exécution 0, 1 et 6 etS
pour les niveaux d'exécution 2, 3, 4 et 5; ii) vous n'avez pas besoin d'appeler le scriptK99_foo
, le nombre détermine simplement l'ordre dans lequel les scripts sont exécutés. Vous devez en choisir un qui est plus grand que les autres si vous voulez qu'il soit exécuté en dernier; iii) Le niveau d' exécution 0 n'est pas destiné au redémarrage! ; C'est pour l'arrêt. 6 est pour le redémarrage. iv) les scripts n'ont rien à faire dans les/etc/rcN.d
répertoires. Ils devraient plutôt être intégrés/etc/init.d
et liés à/etc/rcN.d
.Comment le faire avec systemd
Si vous trouvez ce fil après juin 2016, Ubuntu et ses dérivés, y compris Mint, utiliseront systemd pour contrôler l'initialisation et l'arrêt du système. J'ai eu des problèmes avec l'ancienne approche alors j'ai fait des recherches sur la manière systémique.
Avec systemd, vous créez un ou deux fichiers pour appeler vos scripts à l'aide des modèles ci-dessous et exécutez une commande. Simple.
Version GUI
Créez d' abord les scripts que vous souhaitez exécuter au démarrage et / ou à l'arrêt. J'ai créé .scopening_atstart et .scfullcopy_atend.
Ensuite , assurez - vous qu'ils sont à la fois exécutable en cliquant droit sur le fichier, la sélection des propriétés et faire en sorte que, dans les autorisations, vous avez coché Autoriser l' exécution du fichier comme un programme.
Les deux fichiers que j'ai créés remplissent et enregistrent le contenu d'un disque virtuel. Ils créent également un fichier dans mon répertoire personnel pour prouver que le service fonctionne. Ils étaient de la forme:
J'ai ensuite ouvert mon gestionnaire de fichiers en tant que root, ouvert
/etc/systemd/system
et créé un fichier startup.service et un fichier save-ramdisk.service. Évidemment, vous pouvez choisir vos propres noms et les noms génériques auraient pu inclure un fichier de démarrage appelé johns_start.service et un fichier d'arrêt appelé johns_shutdown.service. Ne choisissez pas les noms de service existants.et
Vous pouvez utiliser les mêmes fichiers de service, en substituant le chemin complet de votre script exécutable au mien.
Enfin pour chacun, exécutez la commande systemctl activez votre_nom_fichier (mais sans le service de suffixe). Donc ma première était
systemctl enable startup
Redémarrez l'ordinateur une fois pour démarrer les services. Le service de démarrage sera exécuté chaque fois que systemd entre dans la cible multi-utilisateurs et le service d'arrêt lorsqu'il quitte la cible multi-utilisateurs. Des fichiers de service alternatifs avec différentes conditions d'activation seront décrits ci-dessous.
Version CLI (ligne de commande)
Cette description suppose que vous opérez à partir de votre répertoire personnel plutôt que / home / john, utilisez sudo au besoin et votre choix d'éditeur où j'écris vim ou svim.
Créez des scripts shell de démarrage et d'arrêt avec la première ligne
#!/bin/sh
et rendez-les exécutables à l'aide dechmod +x my_new_filename
.Créez deux fichiers comme ci-dessus, ou dans cet exemple, un fichier pour gérer les tâches de démarrage et d'arrêt. J'exécuterai des scripts dans mon répertoire personnel mais @don_crissti a montré quelques alternatives sur Stack Exchange.
et copiez dans le contenu du fichier:
Activez ensuite le service avec la commande:
et redémarrez votre système après quoi les services seront actifs. Les commandes
systemctl is-enabled start_and_stop
etsystemctl is-active start_and_stop
peuvent être utilisées pour surveiller vos nouveaux services.Modification des conditions de déclenchement pour l'arrêt
Les fichiers utilisent avant tout l'ouverture ou la fermeture de l'environnement multi-utilisateur pour lancer l'exécution des scripts. Le fichier ci-dessous utilise le début de quatre processus d'arrêt potentiels pour lancer ses scripts. L'ajout ou la suppression des cibles sur la ligne Avant + la ligne WantedBy vous permettra de faire des distinctions plus fines:
Ce fichier a été proposé dans une réponse à Unix et Linux par @Matthias mais je n'ai pas pu le faire fonctionner avant d'avoir ajouté une section d'installation.
Encore une fois, modifiez le script
/etc/systemd/service/
et activez-le à l'aide desystemctl enable your_file_name
. Lorsque j'ai changé les cibles, j'ai utilisé lasystemclt disable file_name
commande, puis je l'ai réactivée, ce qui l'a liée aux répertoires cibles. Redémarrez et le service sera opérationnel.la source
man systemd.unit
les fichiers créés par les utilisateurs peuvent être placés dans$XDG_CONFIG_HOME/systemd/user
et d'autres emplacements d'utilisateurs locaux