Saya membuat beberapa perubahan pada jawaban yang diberikan, karena jika sesuatu layak dilakukan, itu layak dilakukan ke tanah. Saya ingin menyambung kembali jika VPN dijatuhkan, tetapi TIDAK menyambung kembali jika VPN sengaja diputus. Solusi yang saya temukan adalah efektif dan tidak elegan.
Pertama saya menambahkan kait ke startup pppd dan shutdown untuk melacak status VPN yang diinginkan. File-file ini harus dimiliki oleh root, dan memiliki izin baca / eksekusi dunia ( 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: untuk OS X 10.9.5 dan di bawahnya
#!/bin/sh
tail /var/log/ppp.log | grep '\[DISCONNECT\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
/ etc / ppp / ip-down: untuk OS X 10.10 ke atas
#!/bin/sh
tail /var/log/ppp.log | grep '\[TERMINATE\]'
if [ $? == 0 ] ; then
echo false > /var/run/reconnect_vpn
fi
Kemudian dengan memodifikasi AppleScript di atas, saya dapat memeriksa variabel status '/ var / run / reconnect_vpn' untuk menentukan apakah akan membuat VPN kembali:
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
Seperti sebelumnya, ubah jalur set myConnection to the service "VPN"
ke apa pun yang dipanggil VPN Anda. Juga, saat startup, file 'reconnect_vpn' tidak ada, jadi saya menambahkan boolean (startOnLogin) untuk dijadikan sebagai default ketika file tidak dapat ditemukan. Saya suka memulai segera, tetapi jika Anda tidak mengubahnya menjadi false.
Saya merasa bahwa jika Anda adalah tipe orang yang khusus tentang perilaku VPN, maka Anda juga tipe orang yang suka meraba-raba sampai Anda menemukan solusi dan karena itu jawaban ini tidak memiliki audiens. Tapi untuk jaga-jaga, ini dia. Semoga ini bisa membantu seseorang.
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)