Sebelum menandai sebagai duplikat: ini bukan tentang DNS dinamis atau hal serupa.
Saya tahu cara menjalankan skrip setiap kali jaringan saya naik; ini adalah masalah sederhana untuk menambahkan skrip di direktori/etc/NetworkManager/dispatcher.d
seperti ini:
#!/bin/bash
IF=$1
STATUS=$2
case "$2" in
up)
logger -s "NM Script up $IF triggered"
su rmano -c /home/romano/bin/myscript
;;
down)
logger -s "NM Script down $IF triggered"
;;
*)
;;
esac
Dalam kasus saya, myscript
sangat sederhana ifconfig -a > ~/Dropbox/myifconfig.txt
--- saya menggunakannya karena saya perlu mengetahui IP lokal saya dari mana saja di Universitas, dan itu akan sering berubah.
Sejauh ini bagus, sistemnya bekerja ok. Namun sayangnya DHCP di sini dikonfigurasi sehingga IP kadang-kadang berubah tanpa turun / naik dari antarmuka. Dalam hal ini skrip (secara logis) tidak berjalan, dan file tidak diperbarui.
Saya tidak bisa menggunakan pendekatan DynDNS karena perubahan ada di IP lokal , bukan yang terlihat secara eksternal.
Saya bisa polling, dengan hanya meletakkan script di cron dan menjalankannya setiap menit atau menulis yang sedikit lebih kompleks (... jika IP diubah tulis file jika tidak melakukan apa-apa) dan meletakkannya lagi sebagai tugas latar belakang, tetapi tidak elegan. Jadi pertanyaannya adalah:
Apakah ada cara untuk memicu skrip ketika IP lokal saya berubah?
PEMBARUAN 1
Saya mencoba memasukkan skrip /etc/dhcp/dhclient-enter-hooks.d/
, berdasarkan yang ada /etc/dhcp/dhclient-enter-hooks.d/resolvconf
, tetapi tidak akan dipicu. Saya curiga (konfirmasi diperlukan) bahwa NM (manajer jaringan) sedang melakukan negosiasi dhcp dengan sendirinya, tanpa memanggil perintah dhcp ...
sumber
dhclient-enter-hooks.d
skrip ... tapi saya belum pernah mencobanya!/etc/dhcp/dhclient-enter-hooks.d/resolvconf
Skrip yang ada mungkin membantu dalam hal sintaks dan sinyal apa yang harus dicari ("$reason" == "BOUND"
mungkin?)Jawaban:
Menurut halaman manual untuk NetmorkManager, salah satu acara adalah
Saya pikir Anda bisa berubah
untuk
sumber
Saya menyediakan skrip yang mendengarkan sinyal dbus, yang akan memungkinkan Anda untuk bereaksi lebih cepat daripada jika Anda melakukan polling untuk perubahan pada konfigurasi jaringan Anda saat ini. Ini membantu pada sistem di mana skrip / etc / tidak dieksekusi ketika Anda menginginkannya (seperti pada sistem 14.04 saya).
enter / exit hooks.d saya tidak berfungsi
NetworkManager mulai dhclient dengan flag
-sf /usr/lib/NetworkManager/nm-dhcp-client.action
yang tampaknya mengesampingkan perilaku normal kait masuk / keluar. Perilaku default dengan dhclient adalah untuk memanggil skrip/etc/dhcp/dhclient-{enter,exit}-hooks.d
. Itu tidak dipanggil sama sekali di sistem saya.skrip NetworkManager dispatcher.d saya juga tidak berfungsi
Namun NM tidak meminta set script yang berbeda, di
/etc/NetworkManager/dispatcher.d
, untuk menginformasikan berbagai peristiwa. Halaman manual NetworkManager (8) mendefinisikandhcp4-change
dandhcp6-change
tindakan yang tampaknya melakukan apa yang Anda inginkan. Terlepas dari apa yang dikatakan halaman manual tersebut, setidaknya pada sistem saya, hanya sajaup
dandown
tindakan dapat dilakukan. Saya tidak bisa membuat skrip-skrip itu diaktifkan. Jadi ini bukan jalan yang bagus untuk memonitor perubahan IP.jadi, mengintip langsung pada sinyal dbus yang dipancarkan oleh NM
nm-dhcp-client.action
( sumber ), dari baris perintah, cukup mengkonversi semua variabel lingkungan yang ditetapkan oleh dhclient menjadi sinyal dbus. Variabel lingkungan tersebut didefinisikan dalamman dhclient-script
(8). Salah satu yang menarik adalah$new_ip_address
. Apa yang dapat Anda lakukan, seperti yang disarankan oleh @Bernhard, adalah memantau sinyal dan bertindak sesuai dengan isinya.Berikut adalah program yang akan mengintip semua data acara yang ditandai oleh biner itu:
Output dbus-monitor tidak mudah untuk diuraikan dalam skrip. Mungkin lebih mudah untuk memicu keberadaan kata kunci tertentu, misalnya
new_ip_address
, dan dari sana menggunakan alat yang berbeda untuk mendapatkan informasi yang berubah (mis. Ip atau ifconfig).Cobalah!
sumber
Pendekatan polling dengan skrip python. Ide dasarnya adalah untuk terus mengurai output
ip -4 -o add show <INTERFACE>
dan membandingkan hasil saat ini dengan iterasi sebelumnyasumber
Meskipun NetworkManager menggunakan dhclient, ia menyediakan biner sendiri sebagai pengganti skrip dhclient. (Untuk referensi: Anda dapat menemukan biner NM di
/usr/lib/NetworkManager/nm-dhcp-client.action
).Mungkin Anda bisa mengambil pendekatan yang berbeda: NM mengeluarkan sinyal DBus pada semua acara. Anda dapat mendengarkan pada sistem DBus untuk acara yang sesuai dan memicu skrip Anda berdasarkan ini ...
sumber