如何在启动时运行bash脚本


0

我知道这个问题已被问过几次,但我根本无法让它工作。

以下是我为使其工作而采取的步骤:

  1. 编写的脚本保存为 collection.sh
  2. 搬到collection.sh/etc/init.d
  3. 执行$ sudo chmod 711 /etc/init.d/collection.sh以设置执行脚本的权限
  4. 执行$ ln -s /etc/init.d/collection.sh /etc/rc0.d/以创建一个符号链接/etc/rc0.d
  5. 重新启动机器 $ sudo reboot

这些步骤collection.sh在启动时运行失败。那么有谁可以指出我做错了什么?

我想也许我在错误的rc?.d文件夹中创建一个符号链接,因为有0-6和S rc文件夹。如果是这样,应该在哪个文件夹中制作?


如果不知道collection.sh应该做什么或者你期望它做什么就会失败,这个问题根本不可能回答。
杰克古尔德2016年

Answers:


0

我看到你做错了3件事。

第一:您希望将软链接置于/etc/rcS.d/机器进入“单用户”模式(无网络可用)/etc/rc[2-5].d/时运行,并在机器进入“多用户”模式时运行(运行级别2至5) 。/etc/rc0.d/仅在机器被告知关闭时才输入运行级别0 。运行级别6用于“重新启动”。请参阅UNIX运行级别的维基百科页面

第二:软链接的名称不能collection.sh。它必须是S09collection“S”表示Start的形式,“ 09”表示在所有08脚本启动后的Start。有关详细信息,请参见此处

第三:init用于启动守护进程服务,不应该用于直接运行collection.sh。您需要创建一个实际的init脚本来处理collection.sh守护程序的启动和停止。研究预先存在的init脚本,/etc/init.d/以了解它们的工作方式。或者,查看以下链接以获取有关编写init脚本的更多文档。

  • 以下是编写符合LSB的init脚本的方法。这适用于符合LSB的Linux发行版。我注意到你用“ubuntu”标记了你的问题,所以我应该提到Ubuntu(就像所有基于Debian的发行版一样)符合LSB。
  • 是关于使init脚本符合LSB的Debian wiki指南。
  • 是一个关于System V样式初始化脚本的“快速和脏”的方法。
  • 是Github上System V样式初始化脚本的模板。

此外,您不需要直接在/etc/rc?.d文件夹中创建符号链接。主要发行版都有自动化工具。有关详细信息,请参阅此文章


0

很难知道为什么没有看到你的脚本就行不通,但你采取的步骤看似合理。

解释失败的一些可能性可能是

  • 你没有#!/ bin / bash这样的东西作为脚本的第一行
  • 您依赖于尚未配置的二进制文件的路径。
  • 您的脚本没有考虑启动脚本传递启动,停止,重新加载等参数。

在启动时(对于大多数发行版)运行脚本的另一种方法是简单地将其添加到/etc/rc.local - 这具有运行last的附加优势,因此将满足先决条件。


0

符号链接需要以三个字符为前缀,其中“S”表示开始,“K”表示终止/停止,后跟两位数顺序。

大多数发行版都包含一个程序,例如根据update-rc.d需要创建和删除符号链接。尝试使用该命令man -k rc.d查找文档。

您的/etc/init.d目录中可能有一个模板。它可能包含特殊格式的注释,旨在为rd.d更新程序提供参数。如果您没有模板,那么您可能会在那里使用一个简单的脚本作为模板。

一些发行版正在转向执行初始化的替代方法。检查您的发行版文档。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.