Boot
為什麼 /etc/network/interfaces 中的 post-up 命令在啟動時執行多次?
以下是 的內容
/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
) 已經出現向上。