루분투 크론잡; 추가 스크립트를 실행하거나 경로를 볼 수 없습니다

루분투 크론잡; 추가 스크립트를 실행하거나 경로를 볼 수 없습니다

VM에서 Lubuntu를 실행하고 VPN이 활성화되어 있는지 확인하기 위해 1분마다 실행되는 스크립트를 설정하려고 합니다. 그렇지 않으면 모든 것을 껐다가 다시 켜려고 합니다. 스크립트를 수동으로 실행하면 모든 것이 의도한 대로 작동하지만 cronjob으로 설정하면 거의 모든 단계에서 실패합니다.

첫 번째는 라우팅 테이블을 감지할 수 없다는 것입니다. 수동으로 실행하면 터널을 볼 수 있지만 cron으로 실행하면 실패하고 모든 것을 종료하려고 합니다.

두 번째는 추가 스크립트/프로그램 설정을 실행할 수 없다는 것입니다. 'VPN 시작' 지점에 도달한 다음 종료됩니다. 모든 출력은 항상 여기서 중지되지만 cron으로만 수동으로 실행하면 VPN 프로그램이 시작됩니다.

또한 >>/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의 유용한 사용자 덕분에 나는 그것을 알아낼 수 있었고 누군가가 같은 장애물에 부딪힐 경우를 대비해 여기에 게시할 것이라고 생각했습니다. 문제는 ENV var가 전달되지 않은 cron을 통해 GUI 프로그램을 시작하려고 했다는 것입니다. 즉, 표시할 위치를 알 수 있는 방법이 없다는 것입니다. 다음을 통해 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

고정 크론 작업:

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

관련 정보