私は VM で Lubuntu を実行しており、VPN がアクティブかどうかを確認するために 1 分ごとに実行されるスクリプトを設定しようとしています。アクティブでない場合は、すべてをオフにしてから再度オンにします。スクリプトを手動で実行すると、すべてが意図したとおりに動作しますが、cronjob として設定すると、ほぼ毎回失敗します。
まず、ルーティング テーブルを検出できません。手動で実行するとトンネルは表示されますが、cron として実行すると失敗し、すべてを終了しようとします。
2 つ目は、追加のスクリプト/プログラム セットアップを実行できないことです。 「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プログラムを起動しようとしていたことです。つまり、どこに表示するかを知る方法がありませんでした。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