bash
실제로 작동할 수 없는 스크립트 가 있습니다 . 스크립트를 먼저 변경해야 합니다.VPN모든엑스-몇 분 후 연결이 끊어지면 전송됩니다.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
이 스크립트의 문제점은 약 한 시간 정도 잘 작동하다가 갑자기 파일에서 볼 수 있다는 것입니다./tmp/All_IPs_this_boot, 작동이 중지됩니다. 아무것도 쓰지 않습니다./tmp/All_IPs_this_boot. 또한 프로세스가 실행되는 것을 볼 수 있으므로 실행되지 않는 것이 아니라 한 시간 후에 스크립트가 작동하지 않아 수동으로 다시 시작해야 한다는 것입니다.VPN.
답변1
다음을 추가하여 전체 스크립트를 효과적으로 바꿀 수 있습니다.하나의루트의 crontab에 다음 줄이 있습니다:
* * * * * pidof skype >/dev/null 2>&1 || /path/to/restart-vpn.sh
지정된 명령이 1분마다 실행됩니다.
특히 skype
프로세스가 실행되고 있지 않으면 restart-vpn.sh
스크립트가 1분마다 실행됩니다.
이 스크립트의 내용 restart-vpn.sh
도 한 줄로 결합되어야 할 것입니다.
또한, 그것은아마도루트 액세스가 필요하지 않습니다.
그런데, 당신은 위에 표시된 스크립트와 스크립트 사이의 일종의 "마법 인터페이스"로 파일 /tmp/ip
과 파일을 사용하고 있는 것 같습니다 . 명령줄 매개변수를 전달하는 방법을 배우십시오./tmp/All_IPs_this_boot
restart-vpn.sh
쉘 스크립트가 수행하는 작업을 확인하는 가장 쉬운 방법은 set -x
맨 위에 추가한 다음 실행하는 것입니다.