GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Continuer à exécuter un programme Python même après la déconnexion de la session Ssh ?

Cette question a déjà des réponses ici :Comment maintenir les processus en cours d'exécution après la fin de la session ssh ?

(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 :

  1. Utiliser des émulateurs de terminaux comme tmux et screen :

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

  2. 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 & ou nohup COMMAND >/dev/null 2>&1 & si vous souhaitez suspendre le fichier d'informations créé par nohup . 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'utilisation setsid "COMMAND" . Plus d'exemples ici.

  3. 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
  4. Utiliser les gestionnaires de planification comme at et crontab :

    • at – exécuter les commandes ultérieurement ; at et batch 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.

  5. 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 ?
Connexe :la stratégie apt-cache nécessite-t-elle sudo ?
Ubuntu
  1. 4 façons de maintenir une commande en cours d'exécution après la déconnexion de la session SSH

  2. Ssh - Continuer à exécuter les processus après la déconnexion de la session Ssh ?

  3. Ssh - Comment faire pour qu'un processus que je démarre pendant une session Ssh s'exécute après la fin de la session ??

  4. Linux - Arrêtez de regarder la sortie d'un programme particulier après avoir utilisé la commande Watch ?

  5. Gardez le serveur Ubuntu en cours d'exécution sur un ordinateur portable avec le couvercle fermé ?

5 façons de maintenir les sessions et les processus SSH à distance en cours d'exécution après la déconnexion

Commande d'écran Linux :Maintenir les processus en cours d'exécution malgré une connexion interrompue

Comment garder le terminal Gnome ouvert après la fermeture d'un programme ?

Comment maintenir les sessions SSH à distance en cours d'exécution après la déconnexion

Empêcher la tâche Linux en cours d'exécution d'être tuée après la déconnexion de SSH

Reprendre la commande en cours d'exécution dans la session SSH abandonnée