Comment puis-je exécuter un script bash en arrière-plan?

Oct 24 2020

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

1 kanehekili Oct 24 2020 at 20:57

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

1 Seamus Oct 24 2020 at 23:32

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:

  1. créer un systemdservice - comme dans cette réponse

  2. dé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:

  1. Assurez-vous qu'il myscript.shest exécutable .

  2. 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.