Comment puis-je exécuter un script bash en arrière-plan?
J'apprends le script bash et je viens de faire un petit projet pour me notifier (avec notification-envoi) lorsque ma batterie est faible ou chargée.
J'aimerais quelques suggestions sur la façon d'exécuter ce script sans afficher le terminal. Mon idée est de l'ajouter dans le logiciel "Startup Applications" pour qu'il s'exécute au démarrage du système, mais je ne veux pas montrer le terminal, juste pour l'exécuter en arrière-plan.
Réponses
Vous pouvez configurer un service systemd.
Vous pouvez créer un fichier (comme sudo) avec votre éditeur préféré (nano, vim, etc.) comme:
sudo nano /etc/systemd/system/myexecuteable.service
Il doit contenir au moins les éléments suivants:
[Unit]
Description=start my executable after multi-user target
[Service]
Type=simple
ExecStart=/path/to/my/executable
[Install]
WantedBy=multi-user.target
Pour vous assurer que le service démarrera après le redémarrage, exécutez: sudo systemctl enable myexecutable.service
Ce service fonctionnera en continu si vous bash a une sorte de boucle. Si cet exécutable a une sortie (utilisez "logger pour cela dans un fichier bash), vous pouvez le vérifier à tout moment en utilisantjournalctl -u myexecutable.service
Un script peut être exécuté en arrière-plan à partir de la ligne de commande comme ceci:
$ ./myscript.sh &
En d'autres termes, ajoutez &à la commande.
Vous avez dit que vous vouliez exécuter ce script "sans afficher le termial". Je pense qu'il y a deux façons de procéder:
créer un
systemdservice - comme dans cette réponsedémarrez le script en tant que
crontravail lorsque le système démarre:
Pour configurer un crontravail, vous devrez créer une nouvelle crontabentrée.
Pour ce faire, ouvrez un terminal et tapez la commande suivante:
$ crontab -e
Cela ouvrira votre crontabdans un éditeur ( nanoc'est un bon choix pour l'éditeur). Lorsque vous êtes dans l'éditeur, ajoutez la ligne suivante en bas du fichier:
@reboot /home/user/myscript.sh & >> /home/user/myscript.log 2>&1
Où /home/user/myscript.shest le chemin complet de votre fichier de script. Toute sortie de votre script sera redirigée vers le fichier à l'adresse /home/user/myscript.log. Assurez-vous de vérifier ce fichier journal pour tous les messages d'erreur.
Enregistrez le fichier ( ^ o) si vous l'utilisez nanoet quittez l'éditeur ( ^ x).
Quelques points à retenir:
Assurez-vous qu'il
myscript.shest exécutable .Si vous utilisez des commandes dans
myscript.sh, assurez-vous que le système sait où les trouver - c'est-à-dire utilisez un chemin complet vers la commande ou déclarez un PATH dans votre script.
Faites-nous savoir si vous avez d'autres questions (postez un commentaire) et nous essaierons de vous aider.