Si lo ejecuto como cronjob, mi script de shell no abre una pantalla

Si lo ejecuto como cronjob, mi script de shell no abre una pantalla

Eche un vistazo al siguiente script de shell simple startCleanup.sh:

#!/bin/sh
screen -d -m -S cleaner /usr/bin/python3 /opt/cleanup.py 

Mi crontab se ve así:

* * * * * /opt/startCleanup.sh > /opt/cleanup.log 2>&1

Cuando ejecuto este script en el Shell como un usuario que ha iniciado sesión normalmente, no tengo ningún problema. Sin embargo, si ejecuto esto como un cronjob normal, no se inicia ninguna pantalla. O mejor dicho: Se inicia la pantalla (creo) pero cuando termina el script y junto con el script también se finaliza la pantalla.

¿Alguien tiene una idea de cómo resolver este problema?

gracias :)

ACTUALIZACIÓN: Bien, ahora definitivamente sé que la pantalla se ejecuta correctamente (lo verifiqué agregando un modo de suspensión al final del script bash).

Esto es lo que sucede: se crea la pantalla. PERO cuando el script bash finaliza, la pantalla también finaliza. Entonces, la pantalla todavía depende del guión.

¿Cómo puedo evitar que la pantalla finalice cuando finalice el script?

Respuesta1

¿Has probado algo como esto en su lugar?

#!/bin/sh
screen -D -R cleaner /usr/bin/python3 /opt/cleanup.py

Esta combinación de parámetros intentará volver a conectarse a una sesión si existe, o crearla si no existe, según la página de manual.

Además, no creo que haya ningún resultado redirigido al archivo, aparte de los errores que se produzcan al llamar a la pantalla.

Respuesta2

de hecho, usar la pantalla aquí no parece tener mucho sentido. Pero revisé su solución en mi caja y funciona bien. La sesión de pantalla se inicia desde el script iniciado desde cronjob y puedo adjuntarlo. Pruebe algunas cosas:

  1. agregue la ruta completa a la pantalla en el script startCleanup.sh
  2. mire /var/log/cron si los trabajos se inician
  3. redirigir la salida de /usr/bin/python3 /opt/cleanup.py al archivo y verificar si funciona bien cuando se inicia a través de cron

Respuesta3

Estoy enfrentando un problema similar al tuyo, activar manualmente el archivo sh está totalmente bien. pero en cronjob no ejecuta el proceso de pantalla, este es mi código original del archivo sh

#!/bin/bash
bash -c "python GetCookie.py"
wait

export DISPLAY=:0
Respond=`screen -ls`

if [[ $Respond != *"UploadImage"* ]]; then

    screen -dmS myAction bash -c " cd ~/DirectoryName ; /usr/bin/php7.4 index.php bag 1"

else
    echo "NOPEEEE"
fi

el registro de cronjob mostró que activó el trabajo. pero enpantalla -lsno muestra ningún proceso en curso.

lo que hice fue cambiar

screen -dmS myAction bash -c " cd ~/DirectoryName ; /usr/bin/php7.4 index.php bag 1"

a

screen -d -m -S myAction bash -c " cd ~/DirectoryName ; /usr/bin/php7.4 index.php bag 1"

y mi problema solucionado.

información relacionada