Tengo el script de Python bgservice.py
y quiero que se ejecute todo el tiempo, porque es parte del servicio web que construyo. ¿Cómo puedo hacer que funcione continuamente incluso después de desconectarme de SSH?¿Cómo ejecutar una secuencia de comandos de Python en segundo plano incluso después de desconectarme de SSH?
Respuesta
Ejecute nohup python bgservice.py &
para obtener la secuencia de comandos para ignorar la señal de interrupción y seguir funcionando. La salida se pondrá en nohup.out
.
Idealmente, ejecutaría su script con algo como supervise
para que pueda reiniciarse si (cuando) muere.
No se puede, pero prefiero screen.
También podría usar GNU screen que debería tener casi cualquier sistema Linux/Unix.
Si está en Ubuntu/Debian, su variante mejorada byobu es bastante agradable también.
Gracias, me alegraron el día: aparentemente lo mejor desde que se mejoró el pan rebanado. –
Esa es exactamente la misma definición que uso también :) Entonces, ¿cómo llamamos eso? ¿Pan en rebanadas y tostado? ;-) –
rebanado, tostado y luego frito en la mezcla de cerveza. – DataMania
El shell zsh tiene una opción para que todos los procesos en segundo plano se ejecuten con nohup.
En ~/.zshrc
añadir las líneas:
setopt nocheckjobs #don't warn about bg processes on exit
setopt nohup #don't kill bg processes on exit
Entonces sólo tiene que ejecutar un proceso de esta manera: python bgservice.py &
, y ya no es necesario utilizar el comando nohup.
Sé que no mucha gente usa zsh, pero es una carcasa realmente genial que yo recomendaría.
Si ya ha comenzado el proceso, y no desea eliminarlo y reiniciarlo bajo nohup, puede enviarlo a un segundo plano, y luego rechazarlo.
Ctrl+Z
(suspender el proceso)
bg
(reiniciar el proceso en segundo plano
disown %1
(suponiendo que esto es el trabajo # 1, utilice jobs
determinar)
usted podría considerar convertir su pitón secuencia de comandos en un daemon de python adecuado, como se describe here.
python-daemon es una buena herramienta que puede ser u sed para ejecutar scripts de Python como un proceso de daemon de fondo en lugar de un script que se ejecuta para siempre. Deberá modificar un poco el código existente, pero es simple y simple.
Si tiene problemas con python-daemon, existe otra utilidad supervisor que hará lo mismo por usted, pero en este caso no tendrá que escribir ningún código (o modificar el existente) ya que es un solución de caja para procesos de demonización.
dando una breve explicación sobre cómo se puede resolver el problema generalmente es una buena idea. –
Si lo que necesita es que el proceso se ejecute para siempre, independientemente de si ha iniciado sesión o no, considere ejecutar el proceso como daemon.
es una gran solución lista para usar que se puede utilizar para demonizar cualquier proceso. Tiene otra utilidad de control supervisorctl
que se puede usar para monitorear procesos que están siendo ejecutados por el supervisor.
No tiene que escribir ningún código adicional ni modificar scripts existentes para que esto funcione. Además, la documentación detallada hace que este proceso sea mucho más simple.
Después de rascarme la cabeza durante horas alrededor de python-daemon, el supervisor es la solución que me funcionó en minutos.
Espero que esto ayude a alguien tratando de hacer el trabajo de pitón-daemon
Aquí es una solución sencilla dentro de Python usando un decorador:
import os, time
def daemon(func):
def wrapper(*args, **kwargs):
if os.fork(): return
func(*args, **kwargs)
os._exit(os.EX_OK)
return wrapper
@daemon
def my_func(count=10):
for i in range(0,count):
print('parent pid: %d' % os.getppid())
time.sleep(1)
my_func(count=10)
#still in parent thread
time.sleep(2)
#after 2 seconds the function my_func lives on is own
Por supuesto, puede reemplazar el contenido de su archivo bgservice.py
en su sitio de my_func
.
- 1. ¿Cómo ejecutar una secuencia de comandos python en segundo plano?
- 2. ¿Cómo ejecutar una aplicación de Android en segundo plano?
- 3. ¿Cómo ejecutar programas de Python en segundo plano?
- 4. Cómo ejecutar una aplicación de consola .NET en segundo plano
- 5. ¿Cómo puedo seguir ejecutando un programa Unix en segundo plano incluso si cierro la sesión?
- 6. Cómo ejecutar continuamente una secuencia de comandos de Python en un servidor EC2?
- 7. Ejecutando comandos de script después de SSH
- 8. ¿Cómo puedo mantener mi servidor Django en funcionamiento incluso después de cerrar mi sesión ssh?
- 9. Cómo ejecutar una magia de IPython desde una secuencia de comandos (o cronometrar una secuencia de comandos de Python)
- 10. Ejecutar tarea en segundo plano en JavaFX
- 11. cómo ejecutar mi aplicación en segundo plano en iphone?
- 12. ejecutar archivo bat en segundo plano
- 13. Linux: Impedir que se detenga un proceso en segundo plano después de cerrar el cliente SSH
- 14. cómo ejecutar la aplicación android phonegap en segundo plano (después de cerrar la aplicación)?
- 15. Cómo ejecutar secuencias de comandos infinitamente en segundo plano en Linux?
- 16. Ejecutar una secuencia de comandos utilizando ISQL
- 17. ¿Ejecutar instrucción o ejecutar secuencia de comandos?
- 18. nohup: ejecutar el proceso de PHP en segundo plano
- 19. Ejecutar script de python remoto a través de SSH
- 20. ¿Cómo iniciar y ejecutar un script externo en segundo plano?
- 21. cómo ejecutar un comando en segundo plano utilizando ssh y desconectar la sesión
- 22. php ejecutar un proceso en segundo plano
- 23. Ejecutando Python en segundo plano en OS X
- 24. Ejecutar escucha de GPS en segundo plano en Android
- 25. Cómo ejecutar actividad en segundo plano en Android
- 26. Ejecutar secuencia de comandos Powershell de Node.js
- 27. Cómo ejecutar un script de shell en segundo plano y no obtener resultados
- 28. Can Emacs de comandos se ejecutan en segundo plano
- 29. Ejecutar la secuencia de comandos de ruby en el fondo sin usar la pantalla
- 30. La secuencia de comandos PHP no puede obtenerse desde la secuencia de comandos de Python
cuando ejecuto el comando con nohup y &, obtengo el mensaje 'nohup: ignorando en y agrego salida a' nohup.out'' y cuando presiono enter el proceso sale con estado 1. ¿Qué está pasando? –
lea la salida en nohup.out. en mi caso, era un problema de permisos, necesitaba usar sudo – mxns
y cómo detener el servicio bgs luego de ejecutarlo en este método? – Shaegorath