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.
- 1. Exécuter un projet Python dans Eclipse en tant que root
- 2. Exécuter une chaîne en tant que commande en python
- 3. DotNetNuke option sql 'Exécuter en tant que script'
- 4. comment puis-je déterminer si un script python est importé en tant que module ou exécuté en tant que script?
- 5. Comment exécuter un script en tant que root sur Mac OS X?
- 6. Comment puis-je exécuter une application CLI en tant que service Windows?
- 7. SCardEstablishContext se bloque en tant que service
- 8. Exécution d'un script SQL stocké en tant que ressource
- 9. Interprète Python en tant que classe C++
- 10. Exécuter le script Python sans ouvrir Pythonwin
- 11. Comment informer Windows d'un service que j'ai écrit en Python?
- 12. Meilleure méthode pour exécuter une application Java en tant que démon * nix ou service Windows?
- 13. En Perl, comment savoir si mon fichier est utilisé en tant que module ou en tant que script?
- 14. Affichage des fenêtres d'un processus s'exécutant en tant que compte système ou en tant que service
- 15. Comment lancer et exécuter un script externe en arrière-plan?
- 16. WCF fonctionne en tant qu'application, mais pas en tant que service
- 17. Tomcat Journalisation en cours d'exécution en tant que service Windows
- 18. Modification de XML en tant que dictionnaire en python?
- 19. Impossible d'accéder au serveur Python fonctionnant en tant que service Windows
- 20. Exécution d'un serveur Web Python en tant que service sous Windows
- 21. comment exécuter le script php en eclipse
- 22. Comment puis-je obtenir mon script post-commit de git (msysgit on windows) pour appeler mon script python en tant que python plutôt que bash?
- 23. Communiquer avec un service Python
- 24. Exécuter un script php (distant) à partir d'un script python (local)
- 25. Jython: Instanciation de la classe java dans un script en tant qu'objet Java, pas en tant qu'objet Python
- 26. Application OpenGL C++ en tant que service web
- 27. Installer EXE en tant que service sur Windows 2008 Server
- 28. Plusieurs instances de même application en tant que service Windows?
- 29. Windows Mobile - Programme Compact Framework en tant que service?
- 30. IIS s'exécutant en tant que service Compte avec AzMan
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. –