Ken*_*art 37 server boot upstart
继this question之后,我为我的无头Ubuntu Server 11.04框编写了一个简单的新贵服务(/etc/init/pms.conf),如下所示:
start on filesystem and net-device-up IFACE=eth0
stop on runlevel [016]
respawn
exec /home/administrator/pms-current/PMS.sh
Run Code Online (Sandbox Code Playgroud)
我可以从命令行随意启动(或停止)这个服务:
service pms start
Run Code Online (Sandbox Code Playgroud)
我可以看到它确实在运行。
但是,当我第一次启动我的机器时,服务没有启动。如果我通过 SSH 进入该框并检查服务状态,我会得到:
$ service pms status
pms stop/waiting
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么会发生这种情况?为什么我的服务不在启动时启动?
更新 1:不确定我的服务是否正在启动并随后死亡或根本没有启动,我将以下内容添加到 PMS.sh:
echo "STARTED" > $STARTLOG
Run Code Online (Sandbox Code Playgroud)
这显然只是给了我一些寻找的东西。我通过自己启动服务然后检查start.log 来测试这个。然后我删除了start.log并重新启动。重新启动后它不在那里,所以似乎新贵肯定没有启动我的服务。我想它可能会在这个过程的早期死亡,但考虑到这一切的简单性,这似乎不太可能。
更新 2:我刚刚升级到 11.10,其中包括新贵升级,但这个问题仍然存在。
更新 3:根据要求,我已使用--debug
. cat 的输出/var/log/syslog | grep init
太长,无法放在问题中,但您可以在此处查看。
Cla*_*usi 20
我建议增加工作的详细程度,例如通过使用 pre-start/post-start 条目。
pre-start script
logger "pre-start for myprog"
end script
post-start script
logger "post-start for myprog"
end script
# and for PMS itself:
script
logger "just before executing PMS"
exec /home/administrator/pms-current/PMS.sh
end script
Run Code Online (Sandbox Code Playgroud)
更多信息请访问http://upstart.ubuntu.com/cookbook/
也看看http://upstart.ubuntu.com/wiki/Debugging
Mar*_*ell 14
这里可能发生的情况是 pms 在您的网络适配器出现之前启动,甚至可能在环回适配器 (lo) 之前启动。假设我们谈论的是 PS3 媒体服务器,它是一项网络服务,它可能不喜欢在没有可用接口的情况下启动。
尝试将您的开始标准更改为:
start on filesystem and net-device-up IFACE!=lo
Run Code Online (Sandbox Code Playgroud)
意思是,在任何“真实”网络接口启动后启动。但是,这可能并不理想,如果 eth0 是下一个接口,则 PMS 启动,但您真的希望 PMS 使用 wlan0,那是行不通的。该服务将启动,但它可能无法选择您希望它侦听的界面。假设你知道你要流式传输的界面并且它不会改变,我会将它硬编码到工作中,例如:
start on filesystem and net-device-up IFACE=wlan0
Run Code Online (Sandbox Code Playgroud)
在 Oneiric (11.10) 上,您可以使用该事件static-network-up
来等待所有静态配置的设备。这很好,因为它允许您编写依赖于网络的作业,而无需对接口进行硬编码。[注意:通过“所有静态配置的设备”,我指的是使用/etc/network/interfaces
而不是 NetworkManager。它并不意味着静态 IP 与 DHCP 意义上的静态。]
归档时间: |
|
查看次数: |
71470 次 |
最近记录: |