在 11.10 中启动时运行命令

在 11.10 中启动时运行命令

因此,我对如何在 Ubuntu 11.10 服务器上创建启动脚本感到十分困惑。我读过有关init-scripts、upstart-jobs 等内容的文章,但读得越多,我就越困惑。

我尝试过各种指南,但就是找不到真正有效的。

有人可以告诉我如何创建一个可以在 11.10 中运行的简单脚本吗?

答案1

Marty Fried 的回答包含一个最有价值的信息:烹饪书. 读完这些内容后,您就能够编写自己的初始化脚本了。

但是,您并不想弄乱 init.d、rc*.d、chkconfig 等。在 Ubuntu(和其他发行版)上,它们只是旧 sysvinit 的残留,许多软件包仍在使用或仅出于遗留原因而支持它们。你不需要或者不想去那里:-)

所有 Upstart 脚本中最简单的就是启动一个守护进程(将其放在 /etc/init/mydaemon.conf 中):

exec /path/to/binary

这就是您所需要的全部。当您执行此操作时,Upstart 将运行守护进程start mydaemon

好的,你想让它自动启动吗?通常,在 dbus 之后启动是一个合乎逻辑的选择,所以让我们这样做:

start on started dbus
stop on stopping dbus
exec /path/to/binary

这个简单的脚本会在 dbus 启动时启动您的守护进程,并在 dbus 停止之前停止它。

如果它崩溃了,你想让它重生(重新启动)吗?没问题,只需respawn在文件中添加一行即可。

您的守护进程是否分叉或将自身作为守护进程?好吧,让我们来抓住它!expect fork在单分叉的情况下添加,或expect daemon在真正的(双分叉)守护进程的情况下添加。

让我们总结一下守护进程的简单启动脚本:

author "Your name goes here - optional"
description "What your daemon does shortly - optional"

start on started dbus
stop on stopping dbus

# console output  # if you want daemon to spit its output to console... ick
respawn # it will respawn if crashed/killed

exec /path/to/binary

如果您不想运行守护进程,而只想运行一系列命令,那么让我们忘记该exec行并添加一个脚本部分:

script
   echo "Hello world!"
end script

这会让 Upstart 运行脚本而不是守护进程。脚本部分只是一个普通的 shell 脚本,因此您可以在其中执行几乎任何您想做的事情。

希望有帮助。坚持使用 Upstart 配置文件,不要弄乱旧版 sysv,这样你就能保持理智 :-)

答案2

听起来你走在正确的轨道上。一些混乱可能会出现,因为 Ubuntu 使用 Upstart 而不是传统的 Linux init 系统,但仍然支持旧方法。所以你可能会看到过时的方法仍然有效。

我不是专家,我也不确定你迷失在哪里,但是你读过这里的信息吗:http://upstart.ubuntu.com/cookbook/

在 /etc 中,有很多示例可供查看。我认为实际脚本位于 /etc/init 中,并在各种目录中有链接,如 rc0.d、rc1.d 等。这取决于您希望脚本在哪些运行级别中运行。我似乎记得 Ubuntu 实际上并没有使用很多运行级别,因此您可能会看到很多重复或未使用的链接。

另外,请记住,启动和停止使用相同的脚本。

相关内容