Ubuntu 上的简单启动脚本

Ubuntu 上的简单启动脚本

应该很容易,因为有无数个问题,但似乎我遗漏了一些东西。我有一个脚本,它可以创建一些我需要在启动时运行的目录。它太简单了,没必要费心去弄清楚 upstart 或其他什么 - 它不是服务,不需要监控,只需要在启动时以超级用户权限运行。我试过将脚本直接放入 /etc/rc2.d - 它在一次启动时运行一次,之后就再也不会运行了。系统是否以某种方式记住它运行过并且没有关闭或什么的?我还以 root 身份添加了一个 cron 作业,并将脚本添加为 @reboot 任务,仍然没有成功。这是在 s3 Ubuntu 实例上 - s3 实例是否有一些奇怪的启动方式导致这些简单的东西无法工作?

编辑:我应该提到,我需要这个脚本在启动时尽早运行,因为除其他外,它还设置了 /tmp,这对系统的许多部分来说都很重要。

答案1

  1. 将您的脚本放置到/etc/rc3.d/目录或从其他位置创建符号链接。
  2. 将脚本或链接命名/etc/rc3.d/S50myscript。(数字影响启动顺序,大写 S 是必需的。)
  3. 确保脚本具有执行位(chmod +x script.sh
  4. 确保您的脚本在启动时包含解释器,就像#!/bin/sh它是一个 shell 脚本一样。
  5. 如果需要,您可以通过将所需的回声放入脚本来对其进行调试,例如等echo "step1" >/script.logecho "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

相关内容