Wprowadziłem kilka zmian w podanej odpowiedzi, ponieważ jeśli coś jest warte zrobienia, warto zrobić to w ziemię. Chciałem połączyć się ponownie, jeśli VPN zostanie zerwany, ale NIE ponownie, jeśli VPN został celowo odłączony. Rozwiązanie, które wymyśliłem, było zarówno skuteczne, jak i nieeleganckie.
Najpierw dodałem haki do uruchamiania i zamykania pppd, aby śledzić pożądany stan VPN. Pliki te powinny należeć do roota i mieć światowe uprawnienia do odczytu / wykonywania ( sudo chmod 755 /etc/ppp/ip-*
).
/ etc / ppp / ip-up:
#!/bin/sh
echo true > /var/run/reconnect_vpn
chmod 644 /var/run/reconnect_vpn
/ etc / ppp / ip-down: dla OS X 10.9.5 i niższych
#!/bin/sh
tail /var/log/ppp.log | grep '\[DISCONNECT\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
/ etc / ppp / ip-down: dla OS X 10.10 i nowszych
#!/bin/sh
tail /var/log/ppp.log | grep '\[TERMINATE\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
Następnie, modyfikując powyższy AppleScript, byłem w stanie sprawdzić zmienną statusu „/ var / run / reconnect_vpn”, aby ustalić, czy przywrócić VPN:
on idle
tell application "System Events"
tell current location of network preferences
set myConnection to the service "VPN"
set startOnLogin to true
local doReconnect
try
set doReconnect to (do shell script "cat /var/run/reconnect_vpn")
on error errMsg
set doReconnect to startOnLogin
end try
if myConnection is not null and doReconnect then
if current configuration of myConnection is not connected then
connect myConnection
end if
end if
end tell
return 120
end tell
end idle
Tak jak poprzednio, zmień linię set myConnection to the service "VPN"
na dowolną nazwę VPN. Ponadto podczas uruchamiania plik „reconnect_vpn” nie istnieje, więc dodałem wartość logiczną (startOnLogin), która ma służyć jako domyślna, gdy nie można znaleźć pliku. Lubię zaczynać od razu, ale jeśli nie, zmień to na false.
Mam wrażenie, że jeśli jesteś typem osoby, która szczególnie dotyczy zachowania VPN, to także jesteś osobą, która lubi grzebać, dopóki nie znajdziesz rozwiązania, a zatem ta odpowiedź nie ma odbiorców. Ale na wszelki wypadek, oto jest. Mam nadzieję, że to komuś pomoże.
Can’t get «class svce» "MyVPN" of «class locc» of «class netp» of application "System Events".
System Events got an error: Can’t get service "MyVPN" of current location of network preferences. (-1728)