ทำไมคำสั่ง post-up ใน / etc / network / interfaces วิ่งหลายครั้งในการบู๊ต?


10

นี่คือเนื้อหาของ/etc/network/interfaces:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

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

และsshstartเป็นสคริปต์ที่มีดังต่อไปนี้:

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

เมื่อรีบูตเครื่องcurlคำสั่งจะถูกดำเนินการหลายครั้งไฟล์จะจบลงที่ 2 หรือ 3 ครั้งบนเซิร์ฟเวอร์ ftp และเมื่อฉันดูกระบวนการที่ดูเหมือนว่ามีการใช้งาน autossh หลายอินสแตนซ์อยู่ ... ไม่แน่ใจว่านี่เป็นอย่างไร autossh ทำสิ่งต่าง ๆ หรือไม่ แต่แน่นอนว่า curl ไม่ควรอัปโหลดไฟล์หลายครั้ง

ลางสังหรณ์ของฉันคือsshstartสคริปต์ทั้งหมดทำงานหลายครั้ง แต่ฉันไม่เข้าใจว่าทำไม

ฉันพยายามค้นหารายละเอียดเกี่ยวกับกระบวนการตั้งค่าเครือข่ายตอนบู๊ต แต่สิ่งที่ฉันพบคือข้อมูลไวยากรณ์สำหรับไฟล์อินเตอร์เฟส

ใครช่วยได้บ้าง

ขอบคุณ.

--- แก้ไข --- ดังต่อไปนี้

ตะโกนแนะนำฉันได้แก้ไขไฟล์อินเตอร์เฟซของฉันดังต่อไปนี้ (ลบบรรทัดว่างด้านบนโพสต์ขึ้น):

auto lo
iface lo inet loopback

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

และเพิ่มบรรทัดต่อไปนี้ใน sshstart:

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

นี่คือเนื้อหาของ/run/shm/sshstart.logหลังจากรีบูตเครื่อง:

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

มันวิ่งไปแล้ว 4 ครั้ง :( เกิดอะไรขึ้น?


1
คำแนะนำ: lo ตั้งค่า if-up.d เป็นจริงและ eth0 ยังตั้งค่าเป็นจริง การโพสต์ขึ้นหลังจากที่แต่ละคนมีการตั้งค่า สคริปต์ของคุณต้องขึ้นอยู่กับเพียง 1 อินเตอร์เฟสเท่านั้นซึ่งไม่ใช่ทั้งสองอย่าง
eyoung100

ฉันคิดว่ามันอาจจะเป็นแบบนั้นเดาเวลาให้ RTFM มากกว่านี้
TCZ8

ฉันตรวจสอบไปแล้วและฉันไม่สามารถหาวิธีระบุอะแดปเตอร์สำหรับคำสั่ง post-up ได้ดูเหมือนว่ามีบางสิ่งที่เกี่ยวข้องกับ "stanza" แต่ฉันไม่เข้าใจ หน้าอินเทอร์เฟซ Debian และ Ubuntu มีข้อมูลค่อนข้างมาก แต่ข้ามส่วนนั้นไป
TCZ8

1
ไม่เกี่ยวข้องกับคำถาม แต่ BTW echo $(date)ค่อนข้างอึดอัดและโดยอ้อม อาจจะสะกดได้เช่นdateกัน คล้ายกับการใช้ประโยชน์ของรางวัลแมว
Celada

ฮ่าฮ่าฮ่า! คุณพูดถูก! ฉันไม่รู้ว่าทำไมฉันถึงทำอย่างนั้น: P
TCZ8

คำตอบ:


13

ไฟล์/etc/network/if-up.d จะทำงานโดยอัตโนมัติทุกครั้งที่มีอินเทอร์เฟซ (อินเทอร์เฟซใด ๆ ) เกิดขึ้น เมื่อคุณระบุสคริปต์เดียวกันให้ทำงานอีกครั้งในpost-upคำสั่งที่ชัดเจนคุณจะทำให้สคริปต์ทำงานอีกครั้ง ดังนั้นฉันเดาว่านี่คือสิ่งที่จะเกิดขึ้น:

  • มันทำงานครั้งเดียวเมื่อloขึ้นมา (กับตัวแปรสภาพแวดล้อมIFACE=lo) /etc/network/if-up.dเนื่องจากการตั้งอยู่ใน
  • มันทำงานครั้งเดียวเมื่อeth0เกิดขึ้น (พร้อมกับตัวแปรสภาพแวดล้อมIFACE=eth0) ด้วยเหตุผลเดียวกัน
  • มันจะทำงานอีกครั้งเมื่อeth0เกิดขึ้น (โดยที่ตัวแปรสภาพแวดล้อมถูกIFACEยกเลิกการตั้งค่า) เพราะคุณถามถึงสิ่งนี้ในpost-upคำสั่ง

ฉันไม่แน่ใจว่าครั้งที่สี่มาจากไหน แต่นั่นก็เป็นสามครั้งแล้ว

คุณจำเป็นต้องค้นหาสคริปต์ที่อื่นและเรียกใช้เมื่อใช้post-upคำสั่งหรือปล่อยไว้ที่ใด แต่อย่าพูดถึงมันในpost-upคำสั่งและตรวจสอบค่า$IFACEเพื่อที่จะไม่ทำอะไรเลยเว้นแต่อินเตอร์เฟซที่ต้องการ ( eth0) มา ขึ้น


โอ้โห! ที่สุด! คุณพูดถูกฉันเพิ่งเพิ่มบรรทัดไปยัง sshstart เพื่อ echo $ IFACE ในไฟล์บันทึกของฉันและตรงตามที่คุณอธิบาย! ครั้งแรกคือ lo, ครั้งที่สองคือ eth0, ครั้งที่สามคือ eth0 อีกครั้ง (แบบฟอร์มการโพสต์ขึ้น) และครั้งที่ 4 ไม่ชัดเจน .. มูลค่า $ IFACE ในครั้งที่ 4 คือ: - ทั้งหมดคุณจะไม่เกิดขึ้นรู้ว่าสิ่งนั้น หมายถึง? เพียงแค่อยากรู้อยากเห็น :)
TCZ8

1
--allผมไม่ทราบเกี่ยวกับ ดูเหมือนว่าจะมีคุณสมบัติในการเรียกใช้if-up.dสคริปต์เป็นครั้งสุดท้ายด้วยอาร์กิวเมนต์นี้เพื่อส่งสัญญาณว่าส่วนต่อประสานทั้งหมดอยู่ในขณะนี้ในกรณีที่สคริปต์บางตัวต้องการดำเนินการเมื่อรู้ว่าไม่มีส่วนต่อไปใด ๆ ที่ค้างอยู่ นั่นอธิบายเป็นครั้งที่สี่
Celada

ขอบคุณมากสำหรับความช่วยเหลือของคุณ!
TCZ8

3

ตามที่ระบุไว้โดย Celada /etc/network/if-up.dสคริปต์จะทำงานสำหรับแต่ละอินเตอร์เฟส หากต้องการหลีกเลี่ยงการทำซ้ำกฎเพียงเพิ่ม:

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

ที่ด้านบนสุดของสคริปต์ของคุณ สิ่งนี้จะทำให้สคริปต์ออกจากทันทีหากอินเทอร์เฟซไม่เป็นที่ต้องการ


1

ลบบรรทัดว่างก่อนpost-up- คำสั่ง สิ่งนี้ควรสัมพันธ์กับpost-upคำสั่งeth0เท่านั้น นอกจากนี้ย้ายสคริปต์ของคุณออกจากif-up.dโฟลเดอร์ post-upสคริปในโฟลเดอร์ที่มีการดำเนินการโดยอัตโนมัติไม่ว่าถ้ากำหนดให้เป็น ในกรณีของคุณมันจะทำงานเพิ่มเติมจากpost-upคำสั่งของคุณ


ไม่ทำงานให้ดูการแก้ไขในคำถามของฉัน
TCZ8
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.