Lubuntu cronjob; не может запускать дополнительные скрипты или видеть маршруты

Lubuntu cronjob; не может запускать дополнительные скрипты или видеть маршруты

Я запускаю Lubuntu в виртуальной машине и пытаюсь настроить скрипт, который запускается каждую минуту, чтобы проверить, активен ли VPN, если нет, он все выключает и включает снова. Когда я запускаю скрипт вручную, все работает как задумано, но когда настраиваю как cronjob, он дает сбой почти на каждом шагу.

Во-первых, он не может обнаружить таблицу маршрутизации. При ручном запуске он видит туннель, но при запуске в качестве cron он терпит неудачу и пытается все бросить.

Во-вторых, он не может выполнить дополнительные скрипты/программы настройки. Он доходит до точки «запуска vpn», а затем просто выходит, любой вывод всегда останавливается здесь, но только как cron, запущенный вручную, он запускает программу vpn.

Я также не могу перенаправить вывод в файл, если не добавлять к каждому оператору echo >>/home/localuser1/aqlog.txt. Добавление этого к команде cron ничего не дает.

#!/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"   

У меня также есть следующая настройка в crontab, где autoquit.sh — произвольное имя скрипта выше:

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

решение1

Ну, благодаря полезному пользователю на Reddit я смог разобраться, поэтому я подумал, что стоит разместить здесь пост на случай, если кто-то столкнется с тем же препятствием. Проблема в том, что я пытался запустить программу GUI через cron, в котором не передается переменная ENV, то есть она не могла узнать, где отображать. Как только я добавил DISPLAY=:0 черезэтот полезный форумвсе сработало именно так, как и предполагалось, и теперь программы запускаются.

Исправленный код ниже:

#!/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:

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

Связанный контент