Ubuntu 12.04 上的启动脚本未执行。依赖项/加载顺序。

Ubuntu 12.04 上的启动脚本未执行。依赖项/加载顺序。

我想在 Ubuntu 12.04 上创建一个简单的启动脚本:

myscript.sh

#!/bin/sh
sudo /etc/init.d/nginx start
cd ~/app/current
god -c config/resque.god
sudo /etc/init.d/redis-server start
echo "SCRIPT RUN"

我在 /etc/init.d/myscript.sh 有它

当我做

sudo chkconfig --level 2345 myscript.sh

我得到 myscript.sh 2345

当我做

 sudo chkconfig --add myscript.sh

我明白了

insserv: warning: script 'K01myscript.sh' missing LSB tags and overrides
insserv: warning: script 'myscript.sh' missing LSB tags and overrides
The script you are attempting to invoke has been converted to an Upstart
job, but lsb-header is not supported for Upstart jobs.
insserv: warning: script 'dbus' missing LSB tags and overrides
....
myscript.sh               0:off  1:off  2:on   3:on   4:on   5:on   6:off

**** 编辑::

我检查了 boot.log,发现脚本已经运行,但问题是执行脚本时 god 尚未加载。显然我想在启动时最后加载这个脚本(或者以某种方式检查 god 是否已加载,然后启动脚本)。

答案1

您可能还会对以下cd ~/app/current行感到困惑。~表示当前用户的主目录。我不知道 中的哪些用户脚本init.d是以 root 身份运行的,我猜是 root 身份,但我猜您指的是您自己的,$HOME而不是 root 的。在这种情况下,您应该使用绝对路径。

如果我理解chkconfig正确的话,您是在告诉系统在 init 级别 2 到 5 运行您的脚本。由于它是一个依赖于正在加载的其他模块等的高级脚本,因此您只能在更高的运行级别运行它。看看这一页有关运行级别的更多信息。

根据chkconfig手册页,看起来您想要的是:

sudo chkconfig myscript.sh 35

答案2

您收到的错误消息是因为您缺少 LSB 标签。对于纯粹主义者来说,您的 init.d 脚本很糟糕,因为它没有关于它试图实现什么的注释,没有启动/停止功能,并且通常不像 init.d 脚本那样工作。但是,除非您正在使用共享系统,否则对于您的目的而言,这并不重要。我建议在您编写的每个脚本中添加注释,说明其目的、编写时间和编写者 - 这只是一种很好的做法。

http://wiki.debian.org/LSBInitScripts

查看手册页(http://linux.die.net/man/8/chkconfig)特别是本节:

# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
#              higher quality random number generation.

或者 LSB 风格的诗节:

### BEGIN INIT INFO
# Provides: foo
# Required-Start: bar
# Defalt-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Foo init script
### END INIT INFO

哪个“更好”。这里没有必要重写手册页 - 花点时间阅读文档来了解 init.d 脚本应该做什么。

我想你想要这样的东西:

# chkconfig: 2345 99 1

您可以通过执行操作/etc/rc2.d/*myscript*来仔细检查已设置的 S 和 K 级别。

相关内容