我想在 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 级别。