bash
実際には動作しないスクリプトがあります。スクリプトを最初に変更する必要があります。VPNすべてX- 数分後に接続が切断されると送信されます。VPN。スクリプトは次のとおりです。
re='^[0-9]+$'
sudo rm -rf /tmp/All_IPs_this_boot
sudo -u frederik touch /tmp/All_IPs_this_boot
while :
do
# Restart the VPN, however, only if skype is not running!
if ! [[ $(pidof skype) =~ $re ]] ; then
sudo bash 'restart-vpn.sh' &
else
echo "Error: Skype is running"
fi
# Generate random overall sleep time before restart is forced
TimesOverall=$(shuf -i 35-65 -n 1)
echo "Times to check: $TimesOverall"
# Will check whether the restart worked
n=1
while [[ $n -le $TimesOverall ]]; do
# Choose "random" website to ping
rand=$(shuf -i1-5 -n1)
if [ $rand == 1 ]; then
Website=$(echo "duckduckgo.com")
elif [ $rand == 2 ]; then
Website=$(echo "pingmyurl.com")
elif [ $rand == 3 ]; then
Website=$(echo "ping.eu")
elif [ $rand == 4 ]; then
Website=$(echo "lenovo.com")
else
Website=$(echo "archlinux.org")
fi
if [[ $(ping -4 -c 3 $Website | \
sed '1d' | sed -n 1,4p | cut -c1-14 | \
awk '{printf("%s", $0 (NR==1 ? "" : ""))}') \
== "64 bytes from 64 bytes from 64 bytes from " ]]
then
{ echo -e "IP is $(cat /tmp/ip) at $(date '+%d-%m %H:%M:%S')"; \
cat "/tmp/All_IPs_this_boot"; } > "/tmp/All_IPs_this_boot.new"
mv "/tmp/All_IPs_this_boot.new" "/tmp/All_IPs_this_boot"
sleep 20
((n++))
else
sleep 6
# Choose "random" website to ping
rand=$(shuf -i1-5 -n1)
if [ $rand == 1 ]; then
Website=$(echo "duckduckgo.com")
elif [ $rand == 2 ]; then
Website=$(echo "pingmyurl.com")
elif [ $rand == 3 ]; then
Website=$(echo "ping.eu")
elif [ $rand == 4 ]; then
Website=$(echo "lenovo.com")
else
Website=$(echo "archlinux.org")
fi
if [[ $(ping -4 -c 4 $Website |
sed '1d' | sed -n 1,4p | cut -c1-14 | \
awk '{printf("%s", $0 (NR==1 ? "" : ""))}') \
== "64 bytes from 64 bytes from 64 bytes from 64 bytes from " ]]
then
{ echo -e "IP is $(cat /tmp/ip) at $(date '+%d-%m %H:%M:%S')"; \
cat "/tmp/All_IPs_this_boot"; } > "/tmp/All_IPs_this_boot.new"
mv "/tmp/All_IPs_this_boot.new" "/tmp/All_IPs_this_boot"
sleep 20
((n++))
else
break
fi
fi
done
done
このスクリプトの問題は、約1時間ほどうまく機能し、突然ファイルに表示されることです。/tmp/All_IPs_this_boot、動作が停止します。何も書きません。/tmp/All_IPs_this_boot。また、プロセスが実行されていることがわかるので、実行されていないのではなく、1時間後にスクリプトが機能しないため、手動で再起動する必要があるということです。VPN。
答え1
以下を追加して、スクリプト全体を効果的に置き換えることができます。一つルートのcrontabには次の行があります。
* * * * * pidof skype >/dev/null 2>&1 || /path/to/restart-vpn.sh
指定されたコマンドは1分ごとに実行されます。
特にskype
プロセスが実行されていない場合、restart-vpn.sh
スクリプトは1分ごとに実行されます。
このスクリプトの内容restart-vpn.sh
も1行にまとめる必要があります。
また、それおそらくルートアクセスは必要ありません。
ところで、あなたは上記のスクリプトとスクリプトの間の一種の「魔法のインターフェース」としてファイルと/tmp/ip
ファイルを使用しているようです。コマンドラインパラメータを渡す方法を学びます。/tmp/All_IPs_this_boot
restart-vpn.sh
シェルスクリプトが何をするのかを確認する最も簡単な方法は、set -x
一番上に追加して実行することです。