Mengapa perintah post-up di / etc / network / interfaces berjalan beberapa kali saat boot?

10

Berikut isi dari /etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

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

Dan sshstartadalah skrip dengan yang berikut di dalamnya:

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 [email protected] -p 8080

Ketika mesin reboot, curlperintah dijalankan beberapa kali, file berakhir 2 atau 3 kali pada server ftp dan ketika saya melihat proses sepertinya ada beberapa contoh autossh berjalan ... Tidak yakin apakah ini bagaimana autossh melakukan sesuatu atau tidak, tetapi pastinya curl tidak boleh mengunggah file beberapa kali.

Firasat saya adalah bahwa seluruh sshstartskrip dijalankan beberapa kali tetapi saya tidak mengerti mengapa.

Saya mencoba mencari rincian tentang proses pengaturan jaringan saat boot tetapi yang saya temukan hanyalah informasi sintaks untuk file antarmuka.

Bisakah seseorang membantu?

Terima kasih.

--- Edit ---

Seperti yang disarankan di bawah ini, saya telah memodifikasi file antarmuka saya sebagai berikut (menghapus baris kosong di atas post-up):

auto lo
iface lo inet loopback

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

Dan menambahkan baris berikut ke sshstart:

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

Berikut adalah konten /run/shm/sshstart.logsetelah reboot:

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

Jadi sudah dijalankan 4 kali :( apa yang terjadi?

TCZ8
sumber
1
Petunjuk: lo menetapkan if-up.d menjadi true, dan eth0 juga mengaturnya menjadi true. Post-up berjalan setelah masing-masing diatur. Skrip Anda harus bergantung hanya pada 1 antarmuka, bukan keduanya.
eyoung100
Saya pikir itu bisa menjadi sesuatu seperti itu, kira waktunya untuk RTFM lagi.
TCZ8
Saya telah memeriksa sekitar dan saya tidak dapat menemukan cara untuk menentukan adaptor mana untuk perintah post-up, tampaknya ada hubungannya dengan "bait" tetapi saya tidak benar-benar mendapatkannya. halaman antarmuka Debian dan Ubuntu memiliki cukup banyak info tetapi mereka melewatkan bagian itu.
TCZ8
1
Tidak terkait dengan pertanyaan, tetapi BTW echo $(date)agak canggung dan tidak langsung. Mungkin juga mengeja itu sebagai date. Mirip dengan Penggunaan Cat Award yang Tidak Berguna .
Celada
ha ha ha! kamu benar sekali! Saya tidak tahu mengapa saya melakukan itu: P
TCZ8

Jawaban:

13

File dalam /etc/network/if-up.d sudah berjalan secara otomatis setiap kali antarmuka (antarmuka apa pun) muncul. Saat Anda menentukan skrip yang sama untuk dijalankan lagi dalam post-upperintah eksplisit , Anda hanya menyebabkan skrip dijalankan lagi. Jadi dugaan saya adalah ini yang harus terjadi:

  • Ini berjalan sekali ketika lomuncul (dengan variabel lingkungan IFACE=lo) karena berada di /etc/network/if-up.d.
  • Ini berjalan sekali ketika eth0muncul (dengan variabel lingkungan IFACE=eth0) untuk alasan yang sama.
  • Ini berjalan lagi ketika eth0muncul (dengan variabel lingkungan IFACEtidak disetel) karena Anda meminta ini dalam post-uparahan.

Saya tidak yakin dari mana keempat kalinya, tapi itu sudah tiga.

Anda perlu menemukan skrip di tempat lain dan menjalankannya sekali menggunakan post-uparahan, atau membiarkannya di tempat itu tetapi jangan menyebutkannya dalam post-uparahan dan periksa nilai $IFACEsehingga tidak melakukan apa-apa kecuali antarmuka yang diinginkan ( eth0) telah datang naik.

Celada
sumber
OHH MAN! Akhirnya! Anda memang benar, saya baru saja menambahkan baris ke sshstart untuk menggemakan $ IFACE di file log saya dan persis seperti yang Anda gambarkan! Waktu 1 adalah lo, waktu ke-2 adalah eth0, ke-3 adalah eth0 lagi (membentuk post-up) dan waktu ke-4 tidak begitu jelas .. Nilai $ IFACE pada waktu ke-4 adalah: --semua Anda tidak akan tahu apa itu cara? Hanya dengan rasa ingin tahu :)
TCZ8
1
Saya tidak tahu --all. Kedengarannya ada fitur untuk menjalankan if-up.dskrip untuk terakhir kalinya dengan argumen ini untuk memberi sinyal bahwa semua antarmuka sekarang aktif, kalau-kalau beberapa skrip ingin mengambil tindakan setelah diketahui bahwa tidak ada lagi antarmuka yang tertunda. Itu menjelaskan keempat kalinya.
Celada
Masuk akal, terima kasih atas semua bantuan Anda!
TCZ8
3

Seperti yang dinyatakan oleh Celada, /etc/network/if-up.dskrip dijalankan untuk setiap antarmuka. Untuk menghindari duplikasi aturan, tambahkan saja:

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

di bagian atas skrip Anda. Ini akan menyebabkan skrip segera keluar jika antarmuka bukan yang diinginkan.

ppparadox
sumber
1

Hapus baris kosong sebelum- post-upperintah. Ini seharusnya hanya menghubungkan post-upperintah eth0. Selain itu pindahkan skrip Anda keluar dari if-up.dfolder. Script dalam folder itu dijalankan secara otomatis, tidak masalah jika didefinisikan sebagai post-up. Dalam kasus Anda itu akan berjalan tambahan ke post-upperintah Anda .

xx4h
sumber
Tidak berfungsi, lihat hasil edit di pertanyaan saya.
TCZ8