嗨,我刚刚发现了 ubuntu upstart(etc/init/* 脚本)。我想用它来运行一个特定的应用程序。这个应用程序是通过命令行运行的,但有一个参数用于启动应用程序实例,另一个参数用于停止它(比如说“start”和“stop”)有没有办法使用 upstart 来实现这一点?
答案1
它应该像创建文件一样简单/etc/init/myjob.conf
:
description "My Job"
# start conditions for automatic start
# stop conditions for automatic stop
pre-start exec /path/to/program start
post-stop exec /path/to/program stop
然后您就应该能够sudo start myjob
开始和sudo stop myjob
停止了。
看http://upstart.ubuntu.com了解更多信息。
答案2
如果您只想在启动时启动/停止服务,那么请将您的脚本放入 /etc/init.d 并运行
update-rc.d yourscript defaults
或者如果抱怨
update-rc.d yourscript start 20 2
update-rc.d yourscript stop 20 0
update-rc.d yourscript stop 20 1
update-rc.d yourscript stop 20 6
这两者都会将其添加到启动/关机中。
请注意,这意味着它将以 root 身份运行..因此您可能需要确保脚本将用户切换到您的用户或您希望该程序以其他用户身份运行。
Upstart 旨在尽可能地取代此类脚本。这样做的目的是加快启动速度,并更清晰地编码何时启动/停止服务所需的信息。它只需读取 /etc/init 的内容即可启动,这在将 ureadahead 添加到启动过程时尤其有益,因为 ureadahead 需要缓存的随机小脚本文件越少,它就可以将更多的时间花在启动系统所需的库和程序等重要的事情上。
我敢打赌,你运行的脚本会做一些事情来设置环境,然后以守护进程模式运行程序。你的 upstart 任务应该试图替换脚本的逻辑,而不仅仅是运行脚本。
答案3
我想您会希望它在不同的事件上启动或停止,这样设置两个不同的工作会更容易。
如果相同的事件切换您的应用程序,那么您可以使用脚本设置一项作业,检查它是否正在运行,从而启动或停止您的应用程序。