(14 respuestas)
Cerrado hace 3 años.
Yo script de python llamado scrape.py
. Como sugiere el nombre, es un rastreador web y quiero que se ejecute continuamente en mi máquina Linux incluso después de cerrar sesión y finalizar la sesión ssh. Leí mucho por aquí y hubo muchas sugerencias para usar nohup python scrape.py &
. Esto funcionó bien, pero la ejecución del script se detuvo tan pronto como me desconecté. También exploré el supervisor
aplicación, pero no tengo permisos de root, por lo que también falla. ¿Me puede sugerir una manera de resolver este problema? Gracias.
Mejor respuesta
Existen varios enfoques (herramientas y comandos) que puede utilizar para fines similares:
-
Usa emuladores de terminal como
tmux
yscreen
:-
tmux
– multiplexor de terminales:permite crear, acceder y controlar varios terminales desde una única pantalla.tmux
puede separarse de una pantalla y continuar ejecutándose en segundo plano, luego volver a adjuntarse. Se proporcionan ejemplos de su uso básico aquí y aquí. -
screen
– gestor de pantalla con emulación de terminal VT100/ANSI. Es un administrador de ventanas de pantalla completa que multiplexa una terminal física entre varios procesos (generalmente shells interactivos)... Los programas continúan ejecutándose cuando su ventana no está visible e incluso cuando la sesión de pantalla completa está desconectada de la terminal del usuario. Aquí se proporciona un ejemplo de uso.
-
-
Use comandos separados ejecutados en segundo plano (lea también):
-
nohup
– ejecutar un comando inmune a cuelgues, con salida a un no-tty; Ejecute COMMAND, ignorando las señales de colgado. La sintaxis común para enviar un comando al fondo y separarlo de la sesión de shell actual:nohup COMMAND &
onohup COMMAND >/dev/null 2>&1 &
si desea suspender el archivo de información creado pornohup
. Se proporcionan ejemplos de su uso básico aquí y aquí. También aquí se muestra cómo usarlo a través del comando ssh. -
disown
– similar anohup
pero es shell (zsh, ksh, bash) integrado; se usa para eliminar trabajos de la tabla de trabajos, o para marcar trabajos para que no se les envíe una señal SIGHUP si el shell principal la recibe (por ejemplo, si el usuario cierra la sesión). Aquí se proporciona un ejemplo de uso. -
setsid
– crea una sesión y establece el ID del grupo de procesos. Ejemplo de usosetsid "COMMAND"
. Más ejemplos aquí.
-
-
Usa el
huponexit
Opción de golpe:$ ./script.py > output.txt & [1] 7461 $ shopt -s huponexit $ exit
Referencia:
- Cómo utilizar el control de trabajos de Bash para gestionar procesos en primer plano y en segundo plano en DigitalOcean
-
Usar administradores de horarios como
at
ycrontab
:-
at
– ejecutar comandos en un momento posterior;at
ybatch
leer comandos desde la entrada estándar o un archivo específico que se ejecutará en un momento posterior, usando/bin/sh
. Ejemplo de uso:echo "COMMAND" | at now + 1 minute
. Más ejemplos aquí. -
crontab
– programar trabajo de fondo periódico; es bien conocido para otros propósitos, pero puede especificar un momento determinado en el que su comando se ejecutará solo una vez. Aquí se proporciona una buena calculadora crontab.
-
-
Cree el servicio del sistema e inícielo, consulte:
- ¿Cómo ejecuto un solo comando al inicio usando systemd?
- ¿Cómo ejecutar scripts al inicio?