Si vous construisez un robot, une plate-forme de capteurs, une station météo, vous ne voulez pas que le code s’arrête lorsque vous vous déconnectez du terminal, et nohup est exactement ce qu’il vous faut. Dans ce tutoriel, nous apprendrons à utiliser nohup à travers une série d’exemples
Il y a des moments où vous souhaitez exécuter une commande et la laisser s’exécuter même après avoir fermé une fenêtre de terminal / une session SSH. Le moyen le plus simple consiste à utiliser nohup (pas de raccrochage) qui exécutera n’importe quelle commande ou script exécutable longtemps après la fermeture du terminal.
Utilisation de base de Nohup sous Linux
Dans sa forme la plus élémentaire, nohup peut être utilisé avec un seul argument, le nom du script/commande que l’on souhaite exécuter. Par exemple, si nous avions un script Bash appelé test.sh nous pourrions l’exécuter comme tel.
nohup ./test.sh
Si le script / la commande produit une sortie standard, cette sortie est écrite dans nohup.out et non le terminal. Pour vérifier la sortie, nous pouvons utiliser queue pour suivre les mises à jour apportées au fichier.
tail -f nohup.out
Un exemple d’utilisation de Nohup
Nous avons créé un script Bash simple qui imprime chaque seconde un message à l’écran et met à jour la valeur stockée dans la variable n. Voici le code de ce fichier, appelé test.sh.
#!/bin/bash
n=0
while true
do
echo "I keep counting"
echo $n
n=$((n+1))
sleep 1
done
1. Ouvrez un éditeur de texte et collez l’exemple de code.
2. Enregistrez le fichier dans votre répertoire personnel sous test.sh.
3. Ouvrez un terminal et configurez test.sh pour qu’il soit exécutable.
chmod +x test.sh
4. Testez que test.sh est exécutable en exécutant la commande. En cas de succès, appuyez sur CTRL + C pour arrêter.
5. Utilisez nohup et utilisez le test.sh comme argument. Notez que nous devons utiliser ./test.sh pour indiquer au système où trouver le script. La seule sortie dans le terminal est » nohup: ignorer l’entrée et ajouter la sortie à ‘nohup.out’ «
nohup ./test.sh
6. Ouvrez un autre terminal et utilisez la commande tail pour suivre les mises à jour apportées au fichier nohup.out. Vous devriez voir « Je continue de compter » et un nombre comptant vers le haut défiler sur l’écran.
tail -f nohup.out
sept. Fermez le terminal exécutant nohup. Si vous êtes invité à confirmer la fermeture, sélectionnez Oui. Le terminal exécutant tail -f continuera de fonctionner, indiquant que nohup exécute toujours le script. Nous l’avons confirmé en exécutant htop et en recherchant test.sh.
Redirection de la sortie Nohup
Nohup a une limitation. Par défaut, il écrit dans nohup.outdonc si nous avions deux instances de nohup utilisées, elles écriraient toutes les deux dans le même fichier.
Pour contourner ce problème, nous pouvons utiliser la redirection pour envoyer la sortie vers un autre fichier. Alors utilisons nohup avec le ping pour envoyer un ping à l’un des serveurs DNS de Google et enregistrer la sortie dans GooglePing.txt.
1. Ouvrez une fenêtre de terminal.
2. À l’aide de la commande nohup, utilisez ping 8.8.8.8 comme argument. Cela enverra un ping à l’un des serveurs DNS de Google toutes les secondes, un test de connectivité utile.
nohup ping 8.8.8.8 > GooglePing.txt
3. Ouvrez un autre terminal et utilisez tail pour suivre la sortie de GooglePing.txt. Appuyez sur CTRL+C lorsque vous êtes prêt à arrêter le suivi de la sortie.
nohup ping 8.8.8.8 > GooglePing.txt
4. Dans le terminal nohup, appuyez sur CTRL+C pour arrêter la commande ping.
Exécuter une commande Nohup en arrière-plan
Lorsque nohup s’exécute, il prend le contrôle du terminal, le désactivant efficacement. Mais avec un peu plus de magie Linux, nous pouvons mettre la commande en arrière-plan. En plaçant la commande en arrière-plan, nous pouvons continuer à utiliser le terminal.
Nous allons réutiliser l’exemple de ping pour illustrer.
1. Ouvrez une fenêtre de terminal.
2. À l’aide de la commande nohup, utilisez ping 8.8.8.8 comme argument, puis ajoutez & pour envoyer la commande en arrière-plan. Notez que la sortie de l’exécution de cette commande sera un ID de processus (PID). Nous en aurons besoin plus tard.
nohup ping 8.8.8.8 > GooglePing.txt &
3. Ouvrez un autre terminal et utilisez tail pour suivre la sortie de GooglePing.txt.
4. Dans le terminal nohup, appuyez sur Entrée pour revenir à l’invite. La commande nohup nous rend le contrôle, mais l’invite n’est pas présente. En appuyant sur Entrée, nous pouvons voir l’invite de terminal correcte.
5. Utilisez la commande kill avec l’ID de processus pour terminer le processus d’arrière-plan. Si le processus n’est plus nécessaire, il est recommandé de le supprimer afin de préserver les ressources. Si nous laissions cet exemple s’exécuter, il cinglerait continuellement le serveur DNS de Google jusqu’à ce que l’ordinateur soit éteint.
kill 28365