Maintenant que les variantes Ubuntu et Mint sont passées à systemd, mes anciennes solutions basées sur ce qui précède sont moins satisfaisantes. J'ai fait des recherches sur le Web pour savoir comment procéder avec systemd et j'ai fini par combiner la sagesse des autres et la documenter sous forme de blog sur blogspot.com.au contenant le didacticiel suivant.
Avec systemd, vous créez un ou deux fichiers pour appeler vos scripts à l'aide des modèles ci-dessous, puis exécutez quelques commandes. Facile.
Version graphique
Commencez par créer 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 peuplent et enregistrent le contenu d'un disque mémoire. Ils créent également un fichier dans mon répertoire personnel pour prouver que le service fonctionne. Ils étaient de la forme:
#!/bin/sh
cp -pru /home/john/zRamdisk/subdirectory1/* /home/john/.wine/drive_c/subdirectory1/
rm /home/john/stop_time
date +%D' '%T > /home/john/stop_time
Ensuite, j'ai ouvert mon gestionnaire de fichiers en tant que root, /etc/systemd/system
puis créé 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. Il suffit de ne pas choisir les noms de services existants.
[Unit]
Description=Startup Applications
[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/john/.scopening_atstart
[Install]
WantedBy=multi-user.target
et
[Unit]
Description=Save Ramdisk to Wine drive C
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/john/.scfullcopy_atend
[Install]
WantedBy=multi-user.target
Vous pouvez utiliser les mêmes fichiers de service, en remplaçant le chemin complet de votre script exécutable par le mien.
Enfin, pour chacun d'eux, exécutez la commande systemctl enable your_files_name (mais sans le service de suffixe). Donc mon premier étaitsystemctl 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 entrera dans la cible multi-utilisateurs et le service d’arrêt lorsqu’il quittera 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 depuis votre répertoire personnel plutôt que / home / john, utilisez sudo si nécessaire et votre choix d'éditeur dans lequel j'écris vim ou svim.
Créez des scripts de shell de démarrage et d’arrêt avec la première ligne #!/bin/sh
et rendez-les exécutables à l’aide de chmod +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 montre quelques alternatives sur Stack Exchange .
vim /etc/systemd/system/start_and_stop.service
et copier dans le contenu du fichier:
[Unit]
Description=Run Scripts at Start and Stop
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/home/john/.startup_commands #your paths and filenames
ExecStop=/home/john/.shutdown_commands
[Install]
WantedBy=multi-user.target
Puis activez le service avec la commande:
systemctl enable start_and_stop
et redémarrez votre système après quoi les services seront actifs. Les commandes systemctl is-enabled start_and_stop
et systemctl 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. Ajouter ou supprimer les cibles sur la ligne Avant + la ligne WantedBy vous permettra d’établir des distinctions plus précises:
Ce fichier a été proposé dans la deuxième réponse de ce message, mais je n’ai pas pu le faire fonctionner tant que j’avais ajouté une section d’installation.
Encore une fois, éditez le script /etc/systemd/service/
et activez-le avec systemctl enable your_file_name
. Quand j'ai changé les cibles, j'ai utilisé la systemclt disable file_name
commande, puis je l'ai réactivée, ce qui l'a liée symboliquement aux répertoires cibles. Redémarrez et le service sera opérationnel.
[Unit]
Description=Do something required
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target
# This works because it is installed in the target and will be
# executed before the target state is entered
# Also consider kexec.target
[Service]
Type=oneshot
ExecStart=/home/john/.my_script #your path and filename
[Install]
WantedBy=halt.target reboot.target shutdown.target