Un script de surveillance test1.py écrit en python s'exécute tout le temps pendant que true. Lorsque SSH est distant (en utilisant le terminal de mastic), il démarre le script avec la commande suivante:
La copie de code est la suivante:
Python test1.py &
Maintenant, le script s'exécute normalement et vous pouvez voir le numéro de processus via PS. À l'heure actuelle, vous fermez directement le terminal SSH (n'utilisant pas la commande de sortie, mais l'exécutez directement via le bouton Fermer du mastic). Après s'être connecté à nouveau, vous constatez que le processus est sorti.
Le problème a été résolu par la méthode de démarrage d'arrière-plan. Voici un résumé, ce qui est pratique pour moi de le vérifier à l'avenir.
Courir en arrière-plan sous Linux
Implémenté via Fork
Dans l'environnement Linux, le processus de démon en C est implémenté via Fork, et Python peut également être implémenté via cette méthode. L'exemple de code est le suivant:
La copie de code est la suivante:
#! / usr / bin / env python
heure d'importation, plate-forme
Importer un système d'exploitation
def funzionedemo ():
# Ceci est un exemple de fonction commerciale spécifique
fout = open ('/ tmp / démone.log', 'w')
Bien que vrai:
fout.write (time.ctime () + '/ n')
fout.flush ()
Temps. Sleep (2)
fout.close ()
def Createdaemon ():
Processus #Fork
essayer:
si os.fork ()> 0: os._exit (0)
Sauf Oseror, erreur:
Imprimer 'Fork # 1 Échec:% D (% s)'% (error.errno, error.streror)
OS._EXIT (1)
os.chdir ('/')
os.setsid ()
os.umask (0)
essayer:
pid = os.fork ()
Si pid> 0:
Imprimer 'Daemon pid% d'% pid
os._exit (0)
Sauf Oseror, erreur:
Imprimer 'Fork # 2 Échec:% d (% s)'% (error.errno, error.streror)
OS._EXIT (1)
# Norme de redirection IO
sys.stdout.flush ()
sys.stderr.flush ()
si = file ("/ dev / null", 'r')
so = file ("/ dev / null", 'a +')
se = fichier ("/ dev / null", 'a +', 0)
OS.DUP2 (SI.FILENO (), SYS.STDIN.FILENO ())
OS.DUP2 (SO.FILENO (), SYS.STDOUT.FILENO ())
OS.DUP2 (SE.FILENO (), SYS.STDERR.FILENO ())
# Exécuter le code dans le processus enfant
funzionedemo () # Demo de fonction
Si __name__ == '__MAIN__':
si plateforme.System () == "Linux":
Createdaemon ()
autre:
os._exit (0)
Implémenté via UNSSTART
L'application peut être encapsulée dans les services système via Upstart, et l'exemple complet est enregistré directement ici.
1. Écrivez des scripts Python
La copie de code est la suivante:
[root @ local T27] # Cat test123.py
#! / usr / bin / env python
Importer le système d'exploitation, le temps
Bien que vrai:
Imprimer l'heure.Time ()
Temps.
2. Rédaction du fichier de configuration Upstat
La copie de code est la suivante:
[root @ local t27] # cat /etc/init/miketest.conf
Description "Mon test"
Auteur "[email protected]"
Commencez sur RinLevel [234]
Arrêtez-vous sur RunLevel [0156]
chdir / test / t27
exec /test/t27/test123.py
réapparaître
3. Recharger dans le nord
La copie de code est la suivante:
InitCTL Reload-Configuration
4. Démarrez le service
La copie de code est la suivante:
[root @ local T27] # Démarrer MikeTest
MikeTest Start / Running, Process 6635
[root @ local T27] # PS Aux | grep test123.py
Racine 6635 0,0 0,0 22448 3716? SS 09:55 0:00 Python /test/t27/test123.py
Racine 6677 0,0 0,0 103212 752 PTS / 1 S + 09:56 0:00 Grep Test123.py
5. Service d'arrêt
La copie de code est la suivante:
[root @ local t27] # stop miketest
Arrêt / attente de MikeTest
[root @ local T27] # PS Aux | grep test123.py
Racine 6696 0,0 0,0 103212 752 PTS / 1 S + 09:56 0:00 Grep Test123.py
[root @ local T27] #
Implémenté via le script bash
1. Code python
La copie de code est la suivante:
[root @ test local] # Cat test123.py
#! / usr / bin / env python
Importer le système d'exploitation, le temps
Bien que vrai:
Imprimer l'heure.Time ()
Temps.
2. Écrivez un script de démarrage
La copie de code est la suivante:
[root @ test local] # Cat start.sh
#! / bac / sh
Python test123.py &
3. Démarrez le processus
La copie de code est la suivante:
[root @ test local] #. / start.sh
Si vous utilisez et démarrez directement le processus:
La copie de code est la suivante:
Python test123.py &
Fermer le terminal SSH directement provoquera la sortie du processus.
Implémenté via l'écran, le TMUX et d'autres méthodes
Si vous exécutez temporairement le programme, vous pouvez démarrer le programme via Screen ou TMUX. Voici une description du démarrage du TMUX.
1. Démarrer TMUX
Entrez TMUX dans le terminal pour commencer
2. Démarrez le programme dans TMUX
Exécutez simplement la commande suivante directement (reportez-vous au script ci-dessus): Python test123.py
3. Éteignez directement le terminal SSH (comme le bouton de fermeture sur le mastic);
4. Après Resshing, exécutez la commande suivante:
La copie de code est la suivante:
TMUX attaché
Vous pouvez maintenant voir que le programme Python s'exécute toujours normalement.
Exécutez en arrière-plan sous Windows
Je ne l'ai pas étudié en profondeur dans Windows. La méthode que j'utilise souvent consiste à modifier l'extension du script Python vers ".pyw", et double-cliquez pour s'exécuter en arrière-plan sans modifier aucun code.