(14 réponses)
Fermé il y a 3 ans.
J'ai un script python appelé scrape.py
. Comme son nom l'indique, il s'agit d'un robot d'exploration Web et je souhaite qu'il s'exécute en continu sur ma machine Linux, même après la déconnexion et la fin de la session ssh. J'ai beaucoup lu ici et il y avait de nombreuses suggestions d'utilisation de nohup python scrape.py &
. Cela a bien fonctionné mais l'exécution du script s'est arrêtée dès que je me suis déconnecté. J'ai aussi exploré le supervisor
application mais je n'ai pas les autorisations root donc ça échoue aussi. Pouvez-vous me suggérer un moyen de résoudre ce problème? Merci.
Meilleure réponse
Il existe plusieurs approches (outils et commandes) que vous pouvez utiliser à des fins similaires :
-
Utiliser des émulateurs de terminaux comme
tmux
etscreen
:-
tmux
– multiplexeur de terminaux :il permet de créer, d'accéder et de contrôler plusieurs terminaux depuis un seul écran.tmux
peut être détaché d'un écran et continuer à fonctionner en arrière-plan, puis être rattaché plus tard. Des exemples de son utilisation de base sont fournis ici et ici. -
screen
– gestionnaire d'écran avec émulation de terminal VT100/ANSI. Il s'agit d'un gestionnaire de fenêtres plein écran qui multiplexe un terminal physique entre plusieurs processus (généralement des shells interactifs)… Les programmes continuent de s'exécuter lorsque leur fenêtre n'est pas visible actuellement et même lorsque toute la session écran est détachée du terminal de l'utilisateur. Un exemple d'utilisation est fourni ici.
-
-
Utiliser des commandes détachées exécutées en arrière-plan (lire aussi) :
-
nohup
– exécuter une commande à l'abri des raccrochages, avec une sortie vers un non-tty ; Exécutez COMMAND, en ignorant les signaux de raccrochage. La syntaxe courante pour pousser une commande en arrière-plan et la détacher de la session shell actuelle :nohup COMMAND &
ounohup COMMAND >/dev/null 2>&1 &
si vous souhaitez suspendre le fichier d'informations créé parnohup
. Des exemples de son utilisation de base sont fournis ici et ici. Voici également comment l'utiliser via la commande ssh. -
disown
– similaire ànohup
mais c'est shell (zsh, ksh, bash) intégré ; utilisé pour supprimer des travaux de la table des travaux ou pour marquer des travaux afin qu'un signal SIGHUP ne leur soit pas envoyé si le shell parent le reçoit (par exemple, si l'utilisateur se déconnecte). Un exemple d'utilisation est fourni ici. -
setsid
– crée une session et définit l'ID du groupe de processus. Exemple d'utilisationsetsid "COMMAND"
. Plus d'exemples ici.
-
-
Utilisez le
huponexit
Option Bas :$ ./script.py > output.txt & [1] 7461 $ shopt -s huponexit $ exit
Référence :
- Comment utiliser le contrôle des tâches de Bash pour gérer les processus de premier plan et d'arrière-plan chez DigitalOcean
-
Utiliser les gestionnaires de planification comme
at
etcrontab
:-
at
– exécuter les commandes ultérieurement ;at
etbatch
lire les commandes de l'entrée standard ou d'un fichier spécifié qui doivent être exécutées ultérieurement, en utilisant/bin/sh
. Exemple d'utilisation :echo "COMMAND" | at now + 1 minute
. Plus d'exemples ici. -
crontab
– programmer des travaux de fond périodiques; il est bien connu à d'autres fins, mais vous pouvez spécifier un certain moment où votre commande ne sera exécutée qu'une seule fois. Une belle calculatrice crontab est fournie ici.
-
-
Créez un service système et démarrez-le, voir :
- Comment exécuter une seule commande au démarrage avec systemd ?
- Comment exécuter des scripts au démarrage ?