cronjob de Lubuntu; No se pueden ejecutar scripts adicionales ni ver rutas.

cronjob de Lubuntu; No se pueden ejecutar scripts adicionales ni ver rutas.

Estoy ejecutando Lubuntu en una máquina virtual e intento configurar un script que se ejecuta cada minuto para verificar si la VPN está activa; de lo contrario, apaga y enciende todo nuevamente. Cuando ejecuto el script manualmente, todo funciona según lo previsto, pero cuando lo configuro como un trabajo cronológico falla casi en todo momento.

La primera es que no puede detectar la tabla de enrutamiento. Cuando se ejecuta manualmente, puede ver el túnel, pero cuando se ejecuta como cron falla e intenta salir de todo.

La segunda es que no puede ejecutar la configuración de scripts/programas adicionales. Llega al punto de 'iniciar vpn' y luego simplemente se cierra, cualquier salida siempre se detiene aquí, pero solo como un cron, si se ejecuta manualmente, inicia el programa vpn.

Tampoco parece que pueda obtener la salida para redirigir a un archivo a menos que agregue cada declaración de eco con >>/home/localuser1/aqlog.txt. Agregar eso al comando cron no hace nada.

#!/bin/bash
PATH=/home/localuser1/bin:/home/localuser1/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin

echo "-----------------------------------Script started  $(date)"

echo "Check VPN"
if [route | grep tun0 -c ]; then
    echo "VPN running, check qbit"
    if [pgrep qbit ]; then
        echo "All active, no action needed"
    else
        echo "Not active, starting qbit"
        nohup /usr/bin/qbittorrent >/dev/null &
    fi
else
    echo "no VPN, killing all"
    pkill qbit
    pkill pia
    sleep 2
    echo "Starting VPN"
    nohup /home/localuser1/.pia_manager/pia_manager/run.sh >/dev/null &
    echo "Waiting for VPN to start" 
    sleep 15
    echo "Check VPN active"
    if [route | grep tun0 -c]; then
        echo "VPN active, starting qbit"
        nohup /usr/bin/qbittorrent >/dev/null &
    else
        echo "No VPN, end of script"
        fi
fi
echo "Exiting script"   

También tengo la siguiente configuración en crontab, donde autoquit.sh es el nombre arbitrario del script anterior:

# m h  dom mon dow   command
* * * * * /home/localuser1/autoquit.sh

Respuesta1

Bueno, gracias a un útil usuario de Reddit, pude resolverlo, así que pensé en publicarlo aquí en caso de que alguien se encuentre con el mismo obstáculo. El problema es que estaba intentando iniciar un programa GUI a través de cron, que no tiene ENV var pasado, lo que significa que no tenía forma de saber dónde mostrar. Tan pronto como agregué DISPLAY=:0 víaeste foro útilFuncionó exactamente como estaba previsto y ahora inicia los programas.

Código fijo a continuación:

#!/bin/bash
PATH=/home/localuser1/bin:/home/localuser1/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin

echo "-----------------------------------Script started  $(date)" >>/home/localuser1/aqlog.txt

echo "Checking VPN status" >>/home/localuser1/aqlog.txt
vpnstatus="$(route | grep tun0 -c)"
if [ "$vpnstatus" -gt "0" ]; then
    echo "VPN is running, checking qbit" >>/home/localuser1/aqlog.txt
    qbitstatus="$(pgrep qbit)"
    if [ -n "$qbitstatus" ]; then
        echo "All active, no action needed" >>/home/localuser1/aqlog.txt
    else
        echo "Not active, starting qbit" >>/home/localuser1/aqlog.txt
        nohup qbittorrent >/dev/null &
    fi
else
    echo "no VPN, killing all" >>/home/localuser1/aqlog.txt
    pkill qbit
    pkill pia
    sleep 2
    echo "Starting VPN" >>/home/localuser1/aqlog.txt
    nohup /home/localuser1/.pia_manager/pia_manager/run.sh >/dev/null &
    echo "Waiting for VPN to start"  >>/home/localuser1/aqlog.txt
    sleep 15
    echo "Checking if VPN is active" >>/home/localuser1/aqlog.txt
    vpnstatustwo="$(route | grep tun0 -c)"
    if [ "$vpnstatustwo" -gt "0" ]; then
        echo "VPN is active, starting qbit" >>/home/localuser1/aqlog.txt
        nohup qbittorrent >/dev/null &
    else
        echo "No VPN, end of script" >>/home/localuser1/aqlog.txt
    fi
fi
echo "Exiting script" >>/home/localuser1/aqlog.txt

Trabajo cron fijo:

# m h  dom mon dow   command
* * * * * export DISPLAY=:0 && /home/localuser1/autoquit.sh >> /home/localuser1/script_output.txt 2>&1

información relacionada