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