Lubuntu-Cronjob; kann keine zusätzlichen Skripte ausführen oder Routen sehen

Lubuntu-Cronjob; kann keine zusätzlichen Skripte ausführen oder Routen sehen

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

verwandte Informationen