Ağ bağlantısında OS X 10.6'da komut dosyasını çalıştırın. (/etc/network/if-up.d/ gibi)


17

Mac OS X'te bir ağ arayüzü geldiğinde bir komut dosyası çalıştırmanın herhangi bir yolu var mı?

/ Etc / ppp içinde ip-up adlı bir komut dosyası koymayı denedim, ancak bağlantıyı kesip kablosuz bir ağa yeniden bağlandığımda ateş gibi görünmüyor.

Ağ durumunun değişip değişmediğini sürekli olarak kontrol etmek için bir cron işi çalıştırmamayı tercih ederim. Bazı linux dağıtımlarında, bunu /etc/network/if-up.d/ dosyasına bir komut dosyası koyarak yapabilirsiniz. Mac OS X için benzer bir şey var mı?

Yanıtlar:


5

MarcoPolo ya da web sitesinde listelenen benzer yardımcı programlardan birini deneyebilirsiniz . Konum Değiştirici minimalistseniz umut verici görünür.


1
Ek programlar yüklemeden bunu yapmayı tercih ederim. Ancak, konumu bir ağ değişikliğinde çalıştırmak için bir başlatma yapılandırması içerdiğinden, Konum Değiştirici bağlantısı çok yardımcı oldu.
Zxaos

1
Zxaos: Elbette, bu yüzden dahil ettim. Temelde ne istersen için bir launchd / bash komut dosyası şablonu. Isıtıcı kodunu kendiniz yazmaktan kurtarır.
Daniel Beck

Eğer bu çok ilgili q ( superuser.com/questions/265861 ) bakmak için rahatsız olabilir eğer çok takdir ediyorum (nasıl vpn OSX komut satırından başlatmak ve durdurmak için). Özür dilerim, bu yorumu birkaç saat içinde silerim. Her durumda teşekkürler!
Dan Rosenstark

1
@Yar Sorun değil, ama şu anda orta Avrupa'da gece yarısını geçiyor, bu yüzden lütfen bana tekrar ping atmadan önce yarım gün kadar bekleyin (ve bu arada hiçbir şey ortaya çıkmazsa lütfen ilginç bir soru).
Daniel Beck

Teşekkürler @Daniel Beck. Belki de daha önce gördüğünüz gibi, cevap Applescript kullanmaktı. Muhtemelen OSX'teki birçok şey için, ama sık sık unutuyorum.
Dan Rosenstark

19

Bir launchd aracı izliyor /etc/resolv.confve ağla ilgili iki .plist dosyası /Library/Preferences/SystemConfiguration/benim için çalışıyor gibi görünüyor (Mac OS X 10.8.4'te):

<?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>

Daha önce sadece /etc/resolv.conf kullanmıştım, ancak bunun yeterli olmadığı durumlar vardı.


Bu benim için çok yardımcı oldu, ancak bir hata var ([bu cevap] [1] tarafından bulundu): açılış <plist version="1.0">etiketi eksik. [1] [ apple.stackexchange.com/a/181127/56862]
LiberalArtist

@patrix (ve LiberalArtist): Düzeltme için teşekkürler. Fark etmedim, çünkü 10.8.5'te benim için çalıştı. Sanırım sonraki sürümler daha katı.
mivk

@mivk Bu SystemConfigurationdosyalarda tam olarak ne değişmeli ? Bir ağ kablosunu
takar / çıkarırsam

Bu yakın görünüyor, ancak wifi'yi kapatıp tekrar açarsam, program sadece ağ bağlantısı kesildiğinde çalışır, yeniden bağlandığında değil. Bunu görüyorum /etc/resolv.confbenim wifi durum değişiklikleri, bu yüzden emin yalnızca kesmek çalışan neden değilken dosya silinir ve readded edilir.
Matt Huggins

5

Ağ değişiklikleri, dosya sistemi etkinliği, uygulama başlatma vb.Gibi birçok sistem olayına yanıt olarak komut dosyalarını çalıştırmanıza izin veren crankd kullanmayı düşünmelisiniz .

Mantıklı herhangi bir belge bulamadığım için, krank kullanmaya başlamaya ilişkin küçük bir blog yazısı da yazdım .


Blogunuz anonim okumalardan korunuyor. Lütfen içeriği burada kopyalamayı düşünün.
nfirvine

Bunun için üzgünüm. Blogum taşındı, bu yüzden URL'yi yeni güncelledim. Yayınımdaki bazı bilgilerin bu yanıta taşınabileceğini düşünüyorsanız, yanıtı düzenlemekte serbestsiniz.
Juan A. Navarro

4

Bu bash içinde çalışıyor gibi görünüyor:

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

echo changekomutunuzda bir şey vermeniz gerekiyorsa şunları kullanmanız gerektiğini aklınızda tutarak komutunuzla değiştirin '\'':

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

3

ControlPlane: “Bağlama Duyarlı Hesaplama”

ControlPlane, MarcoPolo'nun doğrudan bir limanıdır ve aslında, MarcoPolo'dan yapılan konfigürasyonun çoğu hala ControlPlane ile çalışır, sadece daha iyi! ControlPlane, Snow Leopard ve daha yeni sürümleri çalıştıran 32 ve 64bit Intel tabanlı Mac'leri destekler.

resim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin


2

Launchd ile başlayın. Bunu kullanarak benzer işlevleri kullanabilirsiniz.

EDIT : 9 yıl sonra, belki değil. Göre bu Wikipedia girişi :

2014 yılında, OS X 10.10 ve iOS 8 ile Apple, lansman kodunu kapalı kaynak libxpc'e taşıdı


özellikle diğer programların ağ değişikliklerini algılamak için nasıl kullandığını anlayabilirsem, launchd doğru yönde atılmış bir adım gibi görünüyor.
Zxaos

@Zxaos, launchd doğru yönde bir adım gibi görünüyor , ancak ağ değişikliklerini algılamasının güvenilir bir yolu yok. Bkz Cevabımı kullanarak bir çözüm için crankd yerine.
Juan A. Navarro

URL bir 404 sayfaya yönlendirir.
Slaven Rezic

@ Slaven-Rezic Yanıt güncellendi ve eski bağlantı kaldırıldı.
CaseyIT
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.