Est-il possible d'exécuter un script Python en tant que service d'arrière-plan sur un serveur Web? Je veux le faire pour socket communication.Puis-je exécuter un script Python en tant que service?
Répondre
Vous pouvez en faire un démon. Il y a un PEP pour une solution plus complète, mais j'ai trouvé que cela fonctionne bien.
import os, sys
def become_daemon(our_home_dir='.', out_log='/dev/null', err_log='/dev/null', pidfile='/var/tmp/daemon.pid'):
""" Make the current process a daemon. """
try:
# First fork
try:
if os.fork() > 0:
sys.exit(0)
except OSError, e:
sys.stderr.write('fork #1 failed" (%d) %s\n' % (e.errno, e.strerror))
sys.exit(1)
os.setsid()
os.chdir(our_home_dir)
os.umask(0)
# Second fork
try:
pid = os.fork()
if pid > 0:
# You must write the pid file here. After the exit()
# the pid variable is gone.
fpid = open(pidfile, 'wb')
fpid.write(str(pid))
fpid.close()
sys.exit(0)
except OSError, e:
sys.stderr.write('fork #2 failed" (%d) %s\n' % (e.errno, e.strerror))
sys.exit(1)
si = open('/dev/null', 'r')
so = open(out_log, 'a+', 0)
se = open(err_log, 'a+', 0)
os.dup2(si.fileno(), sys.stdin.fileno())
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())
except Exception, e:
sys.stderr.write(str(e))
Dans l'extrait de code ci-dessus, je peux voir au moins un problème: la présence du démon renifleur n'est pas faite avant d'essayer de lancer une nouvelle instance. – jldupont
reniflant? Voulez-vous dire si le démon est déjà en cours d'exécution? si c'est le cas, cela est fait dans une procédure différente avant d'appeler le ci-dessus. – Robert
belle démostration, très amusant! Il y a beaucoup de méthode pour faire ce python-démon, sous-processus avec des appels shell personnalisés (nohup, &), mais c'est très simple à comprendre. Agréable :) –
En supposant qu'il est pour Windows, voir this recipe based on srvany
Vous pourriez vouloir vérifier Twisted.
Je l'ai vérifié, et c'est assez confus à saisir. So Twisted est une bibliothèque Python, qui garde un script python en marche pour n'importe quelle tâche de communication? (par exemple Sockets) –
Twisted est une bibliothèque python pour l'écriture de serveurs. Une fois que vous avez écrit un serveur dans twisted, vous pouvez utiliser 'twistd -y server.py' pour l'exécuter en tant que démon – Nathan
Si vous parlez de linux, il est aussi facile que de faire quelque chose comme ./myscript.py &
nohup ./myscript.py et fonctionnera bien –
Ce qu'André a dit. J'ai oublié de mentionner nohup parce que je ne fais que lancer l'écran et le détacher, donc je n'ai pas besoin de faire ça. Ces downvoters sont vicieux. – Unknown
Mais même si vous exécutez l'écran, vous n'avez pas créé de véritable démon, c'est toujours un enfant de votre session d'écran. nohup n'est pas non plus la meilleure solution, mais c'est un moyen rapide d'exécuter un démon unique. – JimB
sur XP et plus tard, vous pouvez utiliser le programme sc.exe d'utiliser un .exe comme un service :
>sc create
Creates a service entry in the registry and Service Database.
SYNTAX:
sc create [service name] [binPath= ] <option1> <option2>...
CREATE OPTIONS:
NOTE: The option name includes the equal sign.
type= <own|share|interact|kernel|filesys|rec>
(default = own)
start= <boot|system|auto|demand|disabled>
(default = demand)
error= <normal|severe|critical|ignore>
(default = normal)
binPath= <BinaryPathName>
group= <LoadOrderGroup>
tag= <yes|no>
depend= <Dependencies(separated by/(forward slash))>
obj= <AccountName|ObjectName>
(default = LocalSystem)
DisplayName= <display name>
password= <password>
Vous pouvez commencer votre PythonScript en lançant l'interpréteur python avec votre script comme argument:
python.exe myscript.py
J'ai un script .py Python. Où est le fichier EXE? –
Essayez py2exe http://www.py2exe.org – Yancy
vous pouvez simplement lancer l'interpréteur python avec votre script comme argument: myscript python.exe.py –
Il est le très utile Pypi package qui est la base de mes daemons écrits en Python.
Il est possible, pour une réponse plus détaillée, de fournir plus d'informations: quel système d'exploitation utilisez-vous, voulez-vous démarrer le service au redémarrage, etc. –
Windows ou Unix Enviroment? – dmeister
Pensez "Serveurs Unix/Linux", que les hébergeurs ont généralement. –