Boot

為什麼 /etc/network/interfaces 中的 post-up 命令在啟動時執行多次?

  • April 24, 2021

以下是 的內容/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命令被執行多次,文件在 ftp 伺服器上結束了 2 或 3 次,當我查看程序時,似乎有多個 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 次 :( 發生了什麼事?

每當一個介面(任何介面)出現時,文件就/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) 已經出現向上。

引用自:https://unix.stackexchange.com/questions/164660