这应该很容易,因为有无数个问题,但似乎我遗漏了一些东西。我有一个脚本,它可以创建一些我需要在启动时运行的目录。它太简单了,没必要费心去弄清楚 upstart 或其他什么 - 它不是服务,不需要监控,只需要在启动时以超级用户权限运行。我试过将脚本直接放入 /etc/rc2.d - 它在一次启动时运行一次,之后就再也不会运行了。系统是否以某种方式记住它运行过并且没有关闭或什么的?我还以 root 身份添加了一个 cron 作业,并将脚本添加为 @reboot 任务,仍然没有成功。这是在 s3 Ubuntu 实例上 - s3 实例是否有一些奇怪的启动方式导致这些简单的东西无法工作?
编辑:我应该提到,我需要这个脚本在启动时尽早运行,因为除其他外,它还设置了 /tmp,这对系统的许多部分来说都很重要。
答案1
- 将您的脚本放置到
/etc/rc3.d/
目录或从其他位置创建符号链接。 - 将脚本或链接命名
/etc/rc3.d/
为S50myscript
。(数字影响启动顺序,大写 S 是必需的。) - 确保脚本具有执行位(
chmod +x script.sh
) - 确保您的脚本在启动时包含解释器,就像
#!/bin/sh
它是一个 shell 脚本一样。 - 如果需要,您可以通过将所需的回声放入脚本来对其进行调试,例如等
echo "step1" >/script.log
。echo "step2" >>/script.log
希望这有帮助:-)
答案2
一个简单的解决方案是将您的代码添加到/etc/rc.local
。然后它将作为最后一个脚本执行。
这rc.本地是一个老的BSD 风格的启动脚本在我所知道的大多数 Linux 版本上都很受欢迎。
如果你想要在启动过程中更好地控制调用时间,请查看更新rc.d/etc/rc?.d/
用于管理从技术目录到启动脚本目录的正确符号链接集/etc/init.d/
。在这里,您可以定义启动过程中脚本调用的顺序。
PS:我的建议是便携的登录启动脚本就是使用logger
命令。这使您的 shell 脚本能够向系统日志守护进程。
附言:缺少 LSB 信息
LSB 信息的一个例子update-rc.d
是这样的注释部分:
### BEGIN INIT INFO
# Provides: tomcat7
# Required-Start: $local_fs $remote_fs $network
# Required-Stop: $local_fs $remote_fs $network
# Should-Start: $named
# Should-Stop: $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start Tomcat (c42Cfg user instance)
# Description: Start the Tomcat servlet engine (c42Cfg user instance).
### END INIT INFO