upstart 脚本:网络启动后运行任务

upstart 脚本:网络启动后运行任务

我正在将当前的服务器设置迁移到较新的硬件,并从 ubuntu karmic koala 迁移到 lucid lynx。目前,我正在使用 gw6c(从 gogo6 网站编译,而不是来自存储库的版本)来获取系统的 ipv6 访问权限。在 karmic koala 系统上,我使用简单的 init.d 脚本来启动 ipv6 客户端

 #! /bin/sh
/usr/local/gw6c/bin/gw6c -f /usr/local/gw6c/bin/gw6c.conf

我想既然它可以在任何运行级别运行,它应该转换为

respawn
console none

start on startup

stop on shutdown

script
exec /usr/local/gw6c/bin/gw6c -f /usr/local/gw6c/bin/gw6c.conf
emit free6_ipv6_started
end script

从 initctrl 启动时,它工作正常,但显然在引导时无法启动。- 它的状态为停止/等待。否则,启动时它工作正常(并重生)。您知道我哪里出错了吗?合适的“启动”参数是什么?

编辑:确切的错误是“init: gw6c 主进程 (xxx) 以状态 8 结束”,然后是进程重生,我怀疑 xxx 是 PID。我也有点怀疑这是因为 gw6c 在网络启动之前启动,我需要在 gw6c 启动之前启动我的 eth0

答案1

显然

respawn
console none

start on (local-filesystems and net-device-up IFACE!=lo)
stop on [!12345]

script
chdir /usr/local/gw6c/bin/

exec /usr/local/gw6c/bin/gw6c 
end script

似乎有效

答案2

将以 gw6c 开头的脚本放在

/etc/network/if-up.d

该文件夹中的所有脚本都会在接口启动后运行。如果您只希望它在 eth0 启动时运行,请编辑 eth0 条目

/etc/network/interfaces

并添加对脚本的调用

iface eth0 inet dhcp
  up /etc/init.d/gw6c restart

我还建议添加预关闭脚本,以便在接口离线之前关闭隧道。

一旦你这样做了,并找到了一个可行的实现,就把它发回这里,这样我就可以使用它了。我的笔记本电脑上有 gw6c,但到目前为止,我一直懒得让它自动化。

答案3

谢谢“The Journeyman geek” :) 你帮我节省了很多时间。我一直在与 /etc/init.d/gw6c 脚本作斗争,尝试使用“sysv-rc-conf -p”进行一些计时,想知道为什么它不起作用(又名 WTF?)。

respawn
console none

start on (local-filesystems and net-device-up IFACE=eth0)
stop on runlevel [!12345]

script

exec /etc/init.d/gw6c start
end script

稍微修改(“运行级别”和执行命令)的脚本就完成了工作!:) :) :)

答案4

从这里: http://upstart.ubuntu.com/cookbook/#single-job-instance-running-without-pid

description     "Uncomplicated firewall"

# Make sure we start before an interface receives traffic
start on (starting network-interface
          or starting network-manager
          or starting networking)

stop on runlevel [!023456]

console output

pre-start exec /lib/ufw/ufw-init start quiet
post-stop exec /lib/ufw/ufw-init stop

相关内容