为什么 /etc/network/interfaces 中的 post-up 命令在启动时多次运行?

TCZ*_*CZ8 12 boot networkmanager network-interface

以下是内容/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

post-up /etc/network/if-up.d/sshstart
Run Code Online (Sandbox Code Playgroud)

而且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
Run Code Online (Sandbox Code Playgroud)

当机器重新启动时,该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
Run Code Online (Sandbox Code Playgroud)

并将以下行添加到 sshstart:

echo $(date)>>/run/shm/sshstart.log
Run Code Online (Sandbox Code Playgroud)

下面是/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
Run Code Online (Sandbox Code Playgroud)

所以它已经运行了 4 次 :( 这是怎么回事?

Cel*_*ada 14

每当接口(任何接口)出现时,文件中的文件/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) 出现向上。