Lubuntu cronjob; 다른 스크립트를 실행하거나 경로를 볼 수 없습니다.

Lubuntu cronjob; 다른 스크립트를 실행하거나 경로를 볼 수 없습니다.

저는 가상 머신에서 Lubuntu를 실행하고 있으며 VPN이 활성화되어 있는지 확인하기 위해 1분마다 실행되는 스크립트를 설정하려고 합니다. 그렇지 않으면 모든 것을 껐다가 다시 켜려고 합니다. 스크립트를 수동으로 실행하면 모든 것이 예상대로 작동하지만 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의 유용한 사용자 덕분에 답변을 찾았으므로 다른 사람이 동일한 장애물에 부딪힐 경우를 대비하여 여기에 게시해야겠다고 생각했습니다. 문제는 cron을 통해 GUI 프로그램을 시작하려고 하는데 ENV var를 전달하지 않는다는 것입니다. 즉, 이를 표시할 위치를 알 수 없다는 의미입니다. 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

관련 정보