[LINUX] Remarque pour faire de python un démon

Je veux faire de quelque chose d'écrit en python un démon

J'ai toujours voulu exécuter un programme écrit en python sur le VPS de Sakura. De plus, il est facile car il peut être utilisé avec systemctl. La méthode est la suivante. Essayez de transformer votre propre commande en service à l'aide de Systemd

environnement

How to

programme

/opt/python_daemon.py


#!/usr/bin/env python
import time
import os
import sys

def main_unit():#Écrivez l'heure toutes les 10 secondes
	while True:
		filepath = '/opt/pydmon.log'
		log_file = open(filepath,'a')
		try:
			log_file.write(time.ctime()+"\n")
		finally:
			log_file.close()
			time.sleep(10)

def daemonize():
	pid = os.fork()#Forkez le processus ici
	if pid > 0:#Pour le processus parent(pid est l'ID de processus du processus enfant)
		pid_file = open('/var/run/python_daemon.pid','w')
		pid_file.write(str(pid)+"\n")
		pid_file.close()
		sys.exit()
	if pid == 0:#Pour les processus enfants
		main_unit()

if __name__ == '__main__':
	while True:
		daemonize()

Précisons Shebang.

Ajoutez #! / Usr / bin / env python ou #! / Usr / bin / python au début. #! / usr / bin / env python semble utiliser de préférence python au début de $ PATH. D'un autre côté, #! / Usr / bin / python semble spécifier python directement sous / usr / bin /. Un désagrément peut survenir si la version est différente.

Je connaissais bien le débordement de Stack, donc si vous êtes intéressé, veuillez vous y référer. Why do people write #!/usr/bin/env python on the first line of a Python script?

À propos de daemonize ()

En interrompant le processus, le processus parent écrit l'ID de processus enfant retourné dans la variable pid dans le fichier pid et disparaît. Le processus fils, par contre, exécute main_unit () toutes les 10 secondes dans une boucle infinie.

Après l'enregistrement, donnez l'autorisation d'exécution.

sudo chmod 755 /opt/python_daemon.py Vous devriez maintenant avoir l'autorisation d'exécution.

Créer un fichier de définition d'unité

/usr/lib/systemd/system/pythondaemon.service


[Unit]
Description=PythonDaemon

[Service]
ExecStart=/opt/python_daemon.py
Restart=always
Type=forking
PIDFile=/var/run/python_daemon.pid

[Install]
WantedBy=multi-user.target

Fichier de définition du démon. Si ExecStart et PID File correspondent, je pense que vous pouvez copier et coller.

Démarrez le démon

sudo systemctl daemon-reload sudo systemctl start pythondaemon.service

Après avoir rechargé le démon, le nouveau pythondaemon.service sera reconnu. Puis démarrez-le avec start.

résultat

$ sudo systemctl status pythondaemon.service


● pythondaemon.service - PythonDaemon
   Loaded: loaded (/usr/lib/systemd/system/pythondaemon.service; disabled; vendor preset: disabled)
   Active: active (running)depuis le mois 2017-09-11 00:35:12 JST; 10s ago
  Process: 4633 ExecStart=/opt/python_daemon.py (code=exited, status=0/SUCCESS)
 Main PID: 4634 (python)
   CGroup: /system.slice/pythondaemon.service
           └─4634 python /opt/python_daemon.py

Ça bouge!

pydmon.log ressemble à ceci

$ cat pydmon.log 
Mon Sep 11 00:35:12 2017
Mon Sep 11 00:35:22 2017
Mon Sep 11 00:35:32 2017
Mon Sep 11 00:35:42 2017
Mon Sep 11 00:35:52 2017
Mon Sep 11 00:36:02 2017
Mon Sep 11 00:36:12 2017
Mon Sep 11 00:36:22 2017
Mon Sep 11 00:36:32 2017
Mon Sep 11 00:36:42 2017
Mon Sep 11 00:36:52 2017
Mon Sep 11 00:37:02 2017

Impressions

Je l'ai apprécié car il peut être géré avec systemctl, et je suis impressionné par quelque chose

Recommended Posts

Remarque pour faire de python un démon
Remarque: Python
Note de Python
Note d'apprentissage Python_002
Remarque: décorateur Python
Mis à jour vers Python 2.7.9
Note de programmation Python
[Python] Note d'apprentissage 1
Note d'apprentissage Python_004
Note d'apprentissage Python_003
[Remarque] openCV + python
Note du débutant Python
"Backport" vers python 2
Essayer de gérer SQLite3 avec Python [Note]
3 façons d'analyser les chaînes de temps avec python [Note]
[Note] future déclaration ~ Python ~
[Note] Lecture de fichier ~ Python ~
Comment installer Python
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
Réécrire le code Python2 en Python3 (2to3)
Comment installer python
Introduction au langage Python
Démoniser un processus Python
Introduction à OpenCV (python) - (2)
Remarque Python: lors de l'attribution d'une valeur à une chaîne
Remarque: python Skeleton Nya
Introduction de Python 2.7 à CentOS 6.6
Connectez python à mysql
Note d'introduction Python Tkinter
Script Python pour obtenir des informations de note avec REAPER
Remarque sur l'attribution de textures d'image aux matériaux dans Maya python
Note de lecture: Introduction à l'analyse de données avec Python
Choses à noter lors de l'initialisation d'une liste en Python
Mercurial a cessé de fonctionner après la migration de Python 2 vers Python 3 (Remarque)
Note Python: Le mystère de l'attribution d'une variable à une variable
Connectez-vous à BigQuery avec Python
[2020.8 dernière] Comment installer Python
[python] Convertir la date en chaîne
Publier de Python vers Slack
Comment installer Python [Windows]
publier sur vim → Python → Slack
Pour vider stdout en Python
Convertir numpy int64 en python int
python3: Comment utiliser la bouteille (2)
[Python] Convertir la liste en Pandas [Pandas]
Flirter de PHP à Python
Une route vers Python intermédiaire
Essayez de comprendre Python soi
Notes Python à oublier bientôt
[Python] Comment utiliser la liste 1
Connectez-vous à Wikipedia avec Python
Comment mettre à jour Tkinter de Python vers la version 8.6
Publiez sur Slack avec Python 3
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
Note d'entrée Python dans AtCoder
[Note] Faites fonctionner MongoDB avec Python
Publier sur Twitter en utilisant Python