Ich führe Lubuntu in einer VM aus und versuche, ein Skript einzurichten, das jede Minute ausgeführt wird, um zu prüfen, ob das VPN aktiv ist. Wenn nicht, schaltet es alles aus und wieder ein. Wenn ich das Skript manuell ausführe, funktioniert alles wie vorgesehen, aber wenn ich es als Cronjob einrichte, schlägt es fast immer fehl.
Erstens kann es die Routing-Tabelle nicht erkennen. Bei manueller Ausführung kann es den Tunnel sehen, aber bei Ausführung als Cron schlägt es fehl und versucht, alles zu beenden.
Das zweite ist, dass es die zusätzlichen Skripts/Programme nicht ausführen kann. Es kommt zu dem Punkt „VPN starten“ und wird dann einfach beendet, jede Ausgabe wird hier immer beendet, aber nur als Cron, manuell ausgeführt startet es das VPN-Programm.
Ich kann die Ausgabe auch nicht in eine Datei umleiten, es sei denn, ich hänge an jede Echo-Anweisung >>/home/localuser1/aqlog.txt an. Das Hinzufügen zum Cron-Befehl bewirkt nichts.
#!/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"
Ich habe auch das folgende Setup in crontab, wobei autoquit.sh der beliebige Name des obigen Skripts ist:
# m h dom mon dow command
* * * * * /home/localuser1/autoquit.sh
Antwort1
Nun, dank eines hilfreichen Benutzers auf Reddit konnte ich es herausfinden, also dachte ich, ich poste es hier, falls jemand auf dasselbe Hindernis stößt. Das Problem ist, dass ich versucht habe, ein GUI-Programm über cron zu starten, das keine ENV-Variable durchgibt, was bedeutet, dass es keine Möglichkeit hatte, zu wissen, wo es anzeigen soll. Sobald ich DISPLAY=:0 überdieses hilfreiche Forumes hat genau wie vorgesehen funktioniert und startet jetzt die Programme.
Unten behobener Code:
#!/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
Cron-Job behoben:
# m h dom mon dow command
* * * * * export DISPLAY=:0 && /home/localuser1/autoquit.sh >> /home/localuser1/script_output.txt 2>&1