Neden / etc / network / arabirimindeki post-up komutları önyüklemede birden çok kez çalıştırılıyor?


10

İşte içeriği /etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

post-up /etc/network/if-up.d/sshstart

Ve sshstartiçinde aşağıdakileri içeren bir komut dosyasıdır:

curl something something darkside send a file over ftps in the background &
/usr/bin/autossh -M 0 -f -N -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -R 127.0.0.1:2005:127.0.0.1:22 -R 192.168.1.10:2006:192.168.2.110:1912 -L 127.0.0.1:5249:192.168.1.212:5249 username@17.16.15.2 -p 8080

Makine yeniden başlatıldığında, curlkomut birden çok kez yürütülür, dosya ftp sunucusunda 2 veya 3 kez biter ve süreçlere baktığımda birden fazla autossh çalışan örneği var gibi görünüyor ... autossh bir şey yapar ya da yapmaz, ancak curl dosyayı birden çok kez yüklememelidir.

Benim önsezi, tüm sshstartkomut dosyası birden çok kez çalıştırılır ama nedenini anlamıyorum.

Önyükleme sırasında ağ kurulum işlemi hakkında ayrıntılı bilgi aramayı denedim, ancak bulabildiğim tek şey arabirimler dosyası için sözdizimi bilgileriydi.

Birisi yardım edebilir mi lütfen?

Teşekkür ederim.

--- Düzenle ---

Aşağıda önerildiği gibi arayüzler dosyamı aşağıdaki gibi değiştirdim (kayıt sonrası yukarıdaki boş satırlar kaldırıldı):

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
post-up /etc/network/if-up.d/sshstart

Ve sshstart'a şu satırı ekledi:

echo $(date)>>/run/shm/sshstart.log

/run/shm/sshstart.logYeniden başlatmanın ardından içeriği :

Wed Oct 29 08:07:00 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014
Wed Oct 29 08:07:07 EDT 2014

Peki 4 kez koştu :( neler oluyor?


1
İpucu: lo if-up.d öğesini true değerine ve eth0 da true değerine ayarlar. Post-up her biri ayarlandıktan sonra çalışır. Betiğinizin her ikisine birden değil, yalnızca 1 arabirime bağlı olması gerekir.
eyoung100

Bunun böyle bir şey olabileceğini düşündüm, sanırım RTFM'ye gitme zamanı biraz daha.
TCZ8

Etrafta kontrol ettim ve post-up komutu için hangi bağdaştırıcıyı belirleyeceğimi bulamıyorum, bir "stanza" ile ilgili bir şey var gibi görünüyor ama tam olarak anlamıyorum. Debian ve Ubuntu arayüzleri sayfasında oldukça fazla bilgi var ama bu bölümü atladılar.
TCZ8

1
Soru ile ilgili değil, ama BTW echo $(date)biraz garip ve dolaylı. O da bunu heceleyebilir date. Benzer Kedi Ödülü Yararsız Kullanımı .
Celada

hahaha! kesinlikle haklısın! Bunu neden yaptığım hakkında hiçbir fikrim yok: P
TCZ8 21

Yanıtlar:


13

Bir arayüz (herhangi bir arayüz) geldiğinde içindeki dosyalar /etc/network/if-up.d zaten otomatik olarak çalışır. Aynı komut dosyasını açık bir post-upkomutta yeniden çalıştırmayı belirlediğinizde, yalnızca komut dosyasının tekrar çalışmasına neden olursunuz. Benim tahminim şu olmalı:

  • loYerleştirildiği için (ortam değişkeni ile IFACE=lo) geldiğinde bir kez çalışır /etc/network/if-up.d.
  • Aynı nedenden ötürü eth0(ortam değişkeni ile IFACE=eth0) geldiğinde bir kez çalışır .
  • Bir direktifte bunu istediğiniz için eth0geldiğinde (ortam değişkeni IFACEunset ile) tekrar çalışır post-up.

Dördüncü zamanın nereden geldiğinden emin değilim, ama zaten bu üç.

Komut dosyasını başka bir yerde bulmanız ve bir kez bir post-upyönerge kullanarak çalıştırmanız ya da olduğu yerde bırakmanız, ancak bir post-upyönergede bahsetmemeniz $IFACEve istenen arabirim ( eth0) gelmedikçe hiçbir şey yapmaması için değerini kontrol etmeniz gerekir. yukarı.


OHH ADAM! En sonunda! Kesinlikle haklısın, sadece sshstart'a günlük dosyamda $ IFACE yankılamak için bir satır ekledim ve tam olarak açıkladığınız gibi! 1. kez lo, 2. kez eth0, 3. kez tekrar eth0 (post-up formu) ve 4. kez o kadar net değil .. $ IFACE'in 4. kez değeri: - tüm Bunun ne olduğunu bilemezsiniz anlamına geliyor? Sadece merakla :)
TCZ8

1
Bilmiyordum --all. if-up.dBazı komut dosyalarının başka bir arabirimin beklemediğini öğrendikten sonra bir komut almak istediği takdirde , komutları bu argümanla son kez çalıştırmak için bir özellik var gibi görünüyor . Bu dördüncü kez açıklıyor.
Celada

Bu mantıklı, tüm yardımlarınız için teşekkürler!
TCZ8

3

Celada tarafından belirtildiği gibi, /etc/network/if-up.dher arabirim için komut dosyaları çalıştırılır. Kural çoğaltmasını önlemek için şunları ekleyin:

[ "$IFACE" = "eth0" ] || exit 0

komut dosyanızın üst kısmında. Bu, arabirim istenen kod değilse komut dosyasının hemen çıkmasına neden olur.


1

post-up-Komuttan önce boş satırı silin. Bu, post-upkomutu eth0yalnızca ile ilişkilendirmelidir . Ayrıca komut dosyanızı if-up.dklasör dışına taşıyın . Bu klasördeki komut dosyaları, olarak tanımlandıysa da otomatik olarak yürütülür post-up. Sizin durumunuzda post-up-komutunuza ek olarak çalışacaktır.


Çalışmıyor, sorumdaki düzenlemeye bakın.
TCZ8
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.