Jalankan skrip di OS X 10.6 pada koneksi jaringan. (seperti /etc/network/if-up.d/)

17

Apakah ada cara untuk menjalankan skrip ketika antarmuka jaringan muncul di Mac OS X?

Saya sudah mencoba meletakkan skrip bernama ip-up di / etc / ppp tetapi sepertinya tidak menyala ketika saya memutus dan menyambung kembali ke jaringan nirkabel.

Saya lebih suka tidak harus menjalankan pekerjaan cron untuk terus-menerus memeriksa apakah status jaringan telah berubah. Di beberapa distro linux, Anda dapat melakukannya dengan meletakkan skrip di /etc/network/if-up.d/. Apakah ada yang serupa untuk Mac OS X?

Zxaos
sumber

Jawaban:

5

Anda dapat mencoba MarcoPolo atau salah satu utilitas serupa yang tercantum di situs webnya. Location Changer terlihat menjanjikan jika Anda seorang minimalis.

Daniel Beck
sumber
1
Saya lebih suka melakukan ini tanpa menginstal program tambahan. Namun, tautan Location Changer sangat membantu karena menyertakan konfigurasi launchd untuk menjalankan program pada perubahan jaringan.
Zxaos
1
Zxaos: Tentu, itu sebabnya saya memasukkannya. Ini pada dasarnya template launchd / bash script untuk apa pun yang Anda inginkan. Menghemat Anda dari menulis kode boilerplate sendiri.
Daniel Beck
jika saya dapat mengganggu Anda untuk melihat q yang sangat relevan ini ( superuser.com/questions/265861 ) Saya sangat menghargainya (cara memulai dan menghentikan vpn dari baris perintah pada OSX). Maafkan permintaan, saya akan menghapus komentar ini dalam beberapa jam, terlepas. Bagaimanapun, terima kasih!
Dan Rosenstark
1
@Yar Tidak masalah, tapi sudah lewat tengah malam di Eropa tengah sekarang, jadi tolong tunggu setengah hari sebelum mengirim saya lagi (dan tolong lakukan jika tidak ada yang muncul sementara itu, ini pertanyaan yang menarik).
Daniel Beck
Terima kasih @Daniel Beck. Seperti yang mungkin sudah Anda lihat, menggunakan Applescript adalah jawabannya. Mungkin banyak hal di OSX, tapi saya sering lupa.
Dan Rosenstark
19

Agen launchd yang menonton /etc/resolv.conf, dan dua file .plist terkait jaringan di bawah /Library/Preferences/SystemConfiguration/tampaknya berfungsi untuk saya (di Mac OS X 10.8.4):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>ifup.ddns</string>

  <key>LowPriorityIO</key>
  <true/>

  <key>ProgramArguments</key>
  <array>
    <string>/Users/Shared/bin/ddns-update.sh</string>
  </array>

  <key>WatchPaths</key>
  <array>
    <string>/etc/resolv.conf</string>
    <string>/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist</string>
    <string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string>
  </array>

  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

Sebelumnya saya hanya menggunakan /etc/resolv.conf, tetapi ada beberapa kasus di mana itu tidak cukup.

mivk
sumber
Ini sangat membantu saya, tetapi ada kesalahan (ditemukan oleh [jawaban ini] [1]): <plist version="1.0">tag pembuka tidak ada. [1] [ apple.stackexchange.com/a/181127/56862]
LiberalArtist
@patrix (dan LiberalArtist): Terima kasih atas koreksinya. Saya tidak memperhatikan, karena itu bekerja untuk saya di 10.8.5. Saya kira versi selanjutnya lebih ketat.
mivk
@mivk Apa sebenarnya yang harus diubah dalam SystemConfigurationfile - file ini ? Jika saya pasang / cabut kabel jaringan, sepertinya tidak ada yang berubah sama sekali
IceFire
Ini sepertinya dekat, tetapi jika saya matikan wifi dan hidupkan kembali, maka program hanya berjalan ketika jaringan terputus, bukan ketika terhubung kembali. Saya melihat bahwa /etc/resolv.conffile tersebut dihapus dan dibaca kembali ketika kondisi wifi saya berubah, jadi saya tidak yakin mengapa itu hanya berjalan pada putuskan.
Matt Huggins
5

Anda harus mempertimbangkan untuk menggunakan crankd , yang memungkinkan Anda untuk menjalankan skrip sebagai respons terhadap banyak peristiwa sistem seperti perubahan jaringan, aktivitas sistem file, peluncuran aplikasi, dll.

Karena saya tidak dapat menemukan dokumentasi yang masuk akal, saya juga menulis posting blog kecil tentang cara mulai menggunakan crankd .

Juan A. Navarro
sumber
Blog Anda dilindungi dari pembacaan anonim. Harap pertimbangkan menduplikasi konten di sini.
nfirvine
Maaf soal itu. Blog saya telah pindah, jadi saya baru saja memperbarui url. Jangan ragu untuk mengedit jawaban jika Anda merasa bahwa beberapa informasi dari pos saya dapat dimigrasikan ke dalam jawaban ini.
Juan A. Navarro
4

Ini tampaknya bekerja di bash:

(echo -e "n.add State:/Network/Global/IPv4\nn.watch" & cat) | \
 scutil | \
 awk '/notification/ {system("echo change")}'

ganti echo changedengan perintah Anda, ingatlah bahwa jika Anda perlu mengutip sesuatu dalam perintah Anda, Anda harus menggunakan '\'':

(echo -e "n.add State:/Network/Global/IPv4\nn.watch" & cat) | \
 scutil | \
 awk '/notification/ {system("echo '\''&'\''")}'
Joe Hildebrand
sumber
3

ControlPlane: "Konteks Sensitif Komputasi"

ControlPlane adalah port langsung dari MarcoPolo dan pada kenyataannya, banyak konfigurasi dari MarcoPolo masih bekerja dengan ControlPlane, hanya lebih baik! ControlPlane mendukung 32 dan 64bit Mac berbasis Intel yang menjalankan Snow Leopard dan lebih tinggi.

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

cwd
sumber
2

Mulai dengan launchd. Anda mungkin dapat menggunakan fungsionalitas serupa.

EDIT : 9 tahun kemudian, mungkin tidak. Menurut entri Wikipedia ini :

Pada tahun 2014, dengan OS X 10.10 dan iOS 8, Apple memindahkan kode untuk launchd ke libxpc sumber tertutup

CaseyIT
sumber
launchd sepertinya merupakan langkah ke arah yang benar, terutama jika saya bisa mengetahui bagaimana program lain menggunakannya untuk mendeteksi perubahan jaringan.
Zxaos
@Zxaos, launchd sepertinya merupakan langkah ke arah yang benar, tetapi tidak ada cara yang dapat diandalkan untuk membuatnya mendeteksi perubahan jaringan. Lihat jawaban saya untuk solusi menggunakan crankd sebagai gantinya.
Juan A. Navarro
URL mengarah ke halaman 404.
Slaven Rezic
@ Slaven-Rezic Jawaban yang diperbarui dan menghapus tautan lama.
CaseyIT