每当一个服务器closures时,我应该运行一个特定的脚本,以确保一些服务总是停止,而其他一些服务仍然运行。
在实践中:在同一主机上的Web服务器closures后(确保数据库处于一致状态),我应该运行一个备份脚本,拍摄MySQL数据库的快照。 我还应该确保networking可用,因为备份脚本将文件传输到另一个主机。
我试图创build一个暴发户的任务,下面的节:
start on (stopped apache2 and stopping mysql and net-device-up IFACE=eth0)
但是这个脚本从来没有运行。
我需要什么节以确保脚本正确运行? 还是有可能与暴发户?
更新:我testing的操作系统是Ubuntu 11.04(natty)
重要的是要记住,新贵是一个事件驱动系统,而不是一个依赖系统。
所以使用“和”可能是危险的。 所有这些事件恰巧开始了你的工作,你要问起这个事情。
所以, 第一次发射net-device-up IFACE = eth0(在引导过程中,如果它是一个服务器,或者当它被一台笔记本电脑接入,并由NetworkManagerpipe理),那么这将是第一个条件。 然后暴发户会等到apache2停止。 如果您使用的是系统apache2脚本,那么它不会被释放,因为它在/etc/init.d中,并且不会发出启动/启动/停止/停止的事件。
你可能想要的是这样的:
start on stopping mysql task pre-start script if service apache2 status ; then exit 0 fi exec /my/backup/script end script
请注意,上面的任务是重要的。 它首先告诉我们,这个工作在主脚本退出之前不会“完成”。 这样,mysql的停止事件将阻塞这个工作,直到完成。 在apache2上的检查可能不正确..因为我不知道你想要做什么,如果apache2仍然运行时,MySQL停止。 事实上,这两个事件并不协调,实际上在系统closures期间并行发生,所以如果你想让它们协调一下,你可能需要另外一个新的工作来停止/启动apache2。 这就够了
start on started mysql stop on stopping mysql pre-start exec /etc/init.d/apache2 start post-stop exec /etc/init.d/apache2 stop
您还需要删除与update-rc.d -f apache2 remove正常的链接。 我build议把这个叫做apache2-upstart,这样它就不会混淆服务命令。