2 votes

Exécuter le script à distance et surveiller son activité sans maintenir la connexion.

Je travaille moi-même sur Linux Mint, j'ai un serveur VPS Ubuntu distant avec un accès root ssh. J'ai script sur le serveur qui fait un traitement long des données. (heures ou jours de traitement).

Maintenant, je peux ouvrir la console sur ma machine, me connecter au VPS via ssh et exécuter script - je vois ce que script fait en temps réel dans ma console (combien de données traitées, combien il reste et ainsi de suite se rafraîchit régulièrement sur mon écran de console) - cela fonctionne.

Comment puis-je faire la même chose, mais sans les dépendances de ma machine locale :

  1. Connectez-vous au serveur et exécutez le script.
  2. Déconnecter et laisser le serveur faire son long travail de traitement, tandis que je peux redémarrer ma machine locale ou jamais l'éteindre sans affecter l'exécution du script du serveur démarré.
  3. Possibilité de se reconnecter plus tard et de voir ce qui est en cours. l'état actuel du processus (les mêmes données que celles qui m'ont été montrées en temps réel) sans interrompre le processus.

6voto

13dimitar Points 2310

Je pense que screen est une solution idéale pour vous. Comment ça marche - vous vous connectez à votre VPS, tapez screen puis exécutez votre script et détachez-vous du script (soit en fermant votre fenêtre de terminal, soit en appuyant sur ctrl+a suivi par ctrl+d )

Votre script (et script) continuera à s'exécuter en arrière-plan. Vous pouvez voir le screen en tapant screen -ls . Pour restaurer votre session et voir la progression/le résultat de votre script, obtenez le numéro d'écran avec screen -ls puis de s'y connecter avec screen -r <screen number> . Et c'est tout. Après la restauration, vous pouvez à nouveau détacher de la même manière.

Vous pouvez installer screen sur votre VPS avec apt-get install screen pour les distributions basées sur Debian et yum install screen pour les distros basées sur RedHat.

2voto

Almad Points 2091

Vous pourriez également exécuter le script en arrière-plan et accéder à la sortie lorsque vous en avez besoin. Mon test script sera plutôt simple :

root@jump:~# cat test.sh
#!/bin/bash
for ((i=0; i<=99999; i+=1)); do
    echo $i
    sleep 1
done

Il imprime juste un numéro par seconde. Pour l'exécuter en arrière-plan, j'utiliserai at :

root@jump:~# at now
warning: commands will be executed using /bin/sh
at> /root/test.sh
at> <EOT>

Note : L'EOT se fait avec Control&D. Après cela, laissez le script s'exécuter, déconnectez-vous du serveur. Quand vous voulez voir la sortie, connectez-vous et trouvez le PID du processus :

root@jump:~# ps aux | grep test
root      6312  0.0  2.1  18048  2836 ?        SN   13:08   0:00    /bin/bash /root/test.sh

Et obtenez la sortie. Remplacez 6312 par le PID de votre processus :

root@jump:~# tail -f /proc/6312/fd/1
137
138
139
140
141
^C

fd/1 = stdout, fd/2 = stderr

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X