저는 가상 머신에서 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