这是我第一次使用 upstart 并且正在使用 EC2。
os/upstart = aws base AMI latest version - upstart-0.6.5-13.3.13.amzn1.x86_64
等待网络启动时,我无法启动以下脚本。如果使用标准
start on runlevel [2345]
stop on runlevel [!2345]
我也尝试过各种组合
start on filesystem and net-device-up IFACE=eth0
start on filesystem and net-device-up IFACE!=lo
任何建议都将不胜感激
description "test for on network start"
start on (started network-interface
or started network-manager
or started networking)
stop on (stopping network-interface
or stopping network-manager
or stopping networking)
script
touch /home/ec2-user/myFile.txt
end script
答案1
Upstart 是一个基于事件的系统。为了使您的作业在正确的阶段执行,它可能需要等待其他启动作业发出的特定事件。
可能的解决方案因系统而异,取决于 upstart 作业的定义方式以及它们发出的事件。它也可能取决于系统上安装的 upstart 版本。
请注意,upstart 可能不会将其日志写入/var/log/upstart
。早期版本可能使用 ,syslogd
而较新版本更有可能将日志写入/var/log/upstart
。
以下解决方案仅适用于问题中提到的系统类型:
os/upstart = aws base AMI latest version - upstart-0.6.5-13.3.13.amzn1.x86_64
在这个系统上,upstart 没有echo
在任何地方记录作业语句。因此这部分可能需要额外的配置。
职位定义:
description "testjob"
start on started elastic-network-interfaces
script
echo $(ping -c 1 serverfault.com) > /var/log/testjob.log
end script
在真实的 EC2 实例上测试:
# cat /var/log/testjob.log
PING serverfault.com (198.252.206.140) 56(84) bytes of data. 64 bytes from stackoverflow.com (198.252.206.140): icmp_seq=1 ttl=51 time=72.9 ms --- serverfault.com ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 73ms rtt min/avg/max/mdev = 72.950/72.950/72.950/0.000 ms
答案2
您的例子非常接近。
Amazon Linux 将其网络服务称为network
。因此,如果您尝试使用 upstart 控制的应用程序/服务需要网络连接,请执行以下操作:
start on (runlevel [345] and started network)
stop on (runlevel [!345] or stopping network)
你不需要需要运行级别位,但能够根据运行级别环境限制服务运行并不是一个坏主意。