¿Es posible ejecutar un script de Python como servicio en segundo plano en un servidor web? Quiero hacer esto para socket communication.¿Puedo ejecutar un script de Python como servicio?
Respuesta
Puedes convertirlo en un daemon. Hay un PEP para una solución más completa, pero he descubierto que esto funciona 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))
En el fragmento de código anterior, puedo ver al menos un problema: la presencia de daemon sniffing no está completa antes de intentar iniciar una instancia nueva. – jldupont
olfateando? ¿Quiere decir verificar si el daemon ya se está ejecutando? si es así, esto se hace en un procedimiento diferente antes de llamar al anterior. – Robert
buena demostración, muy divertido! Hay un montón de método para hacer ese python-daemon, un subproceso con llamadas de shell personalizadas (nohup, &), pero esto es muy simple de entender. Agradable :) –
Asumiendo que esto es para Windows, veo this recipe based on srvany
Es posible que desee echa un vistazo a Twisted.
Lo he comprobado, y es bastante confuso de entender. Entonces Twisted es una biblioteca de Python, que mantiene un script python ejecutándose para siempre para cualquier tarea de comunicación. (por ejemplo, Sockets) –
Twisted es una biblioteca de Python para escribir servidores. Una vez que escriba un servidor en twisted, puede usar 'twistd -y server.py' para ejecutarlo como daemon – Nathan
Si usted está hablando de Linux, es tan fácil como hacer algo como ./myscript.py &
nohup ./myscript.py y funcionará aunque –
Lo que dijo Andre. Me olvidé de mencionar nohup porque normalmente solo ejecuto la pantalla y me desconecto, por lo que no hay necesidad de que haga eso. Estos downvoters son viciosos. – Unknown
Pero incluso si está ejecutando la pantalla, no ha creado un daemon verdadero, todavía es un elemento secundario de su sesión de pantalla. nohup tampoco es la mejor solución, pero es una manera rápida de ejecutar un daemon una vez fuera. – JimB
en XP y posteriormente se puede utilizar el programa de sc.exe utilizar cualquier .exe como servicio :
>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>
Usted puede comenzar su PythonScript iniciando el intérprete de python con su guión como argumento:
python.exe myscript.py
Tengo una secuencia de comandos .py Python. ¿Dónde está el EXE? –
Pruebe py2exe http://www.py2exe.org – Yancy
simplemente puede iniciar el intérprete de Python con su secuencia de comandos como argumento: python.exe myscript.py –
No es la muy útil Pypi package que es la base para mis demonios escritos en Python.
- 1. Ruby script como servicio
- 2. Ejecutar un servidor web Python como un servicio en Windows
- 3. script de Python como un servicio Linux/daemon
- 4. ¿Puedo ejecutar Tomcat como un servicio para descargar?
- 5. autenticación en el script de Python para ejecutar como root
- 6. ¿Beneficios de ejecutar Apache como un servicio?
- 7. ¿Cómo ejecutar un script python desde java?
- 8. ¿Cómo puedo ejecutar un script Python virtualenv como git gancho pre-commit
- 9. Ejecutar un script SQL almacenado como recurso
- 10. Ejecutar script de Python en Crontab
- 11. cómo ejecutar un archivo de script python con un argumento desde otro archivo de script python
- 12. git no puede ejecutar python-script como gancho
- 13. ¿Cómo puedo generar nuevos shells para ejecutar scripts de Python desde un script python base?
- 14. Ejecutar un script de python desde otro script de python, pasando args
- 15. Ejecutar un script de Python fuera de Django
- 16. Cómo ejecutar un script de Python en un horario específico
- 17. ¿Cómo ejecutar un AppleScript desde un script de Python?
- 18. ¿Cómo ejecutar el script de python instalado?
- 19. ¿Cómo puedo ejecutar una aplicación CLI como un servicio de Windows?
- 20. Ejecutar la aplicación Java como servicio
- 21. Ejecutar un script como root a través de ADB
- 22. ejecutar un servicio de Windows como una aplicación de consola
- 23. ¿Puede un script de python ejecutar una función dentro de un script bash?
- 24. Ventajas de ejecutar una aplicación como un servicio
- 25. Ejecutar una aplicación WPF como un servicio de Windows
- 26. Obtener PHP para ejecutar un script de Python
- 27. ¿Cómo puedo ejecutar varios scripts PHP desde un script PHP (como un archivo por lotes)?
- 28. ¿Cómo puedo ejecutar un servicio en un hilo separado?
- 29. ¿cómo puedo ejecutar un applet como aplicación?
- 30. ¿Cómo ejecutar un script como root en Mac OS X?
Es posible, para una respuesta más detallada, proporcione más información: qué sistema operativo usa, desea iniciar el servicio al reiniciar, etc. –
Windows o Unix Enviroment? – dmeister
Piensa en "servidores Unix/Linux", que suelen tener los servidores web. –