我正在运行 raspbian(基于 debian)。我想更改 init 服务的优先级,以便 init 运行的第一个脚本是为我制作的。我该怎么做?
在运行级别 SI 上,有 3 个优先级为 01 的脚本:hostname.sh、fake-hwclock 和 mountkernfs.sh。如果我只是将脚本放在优先级为 01 的运行级别 S 上,那么它就不是第一个被执行的脚本。我尝试使用(例如在 mountkernfs.sh 的情况下)将所有这些脚本的优先级更改为 02
sudo update-rc.d -f mountkernfs.sh remove
sudo update-rc.d mountkernfs.sh start 02 S
第一个命令有效地从 /etc/rcS.d 中删除脚本。第二个命令再次将 mountkernfs.sh 设置为优先级 01。
任何想法?谢谢你!
答案1
/etc/init.d/ 上的 init 脚本指定了有关其 LSB 标头的一些信息,这些信息本质上只是脚本开头的一些行。某些脚本的“Required-Start”字段允许您指定必须在此脚本之前初始化的服务。insserv
自动添加有关 LSB 标头的初始化脚本。
因此,要解决这个问题:
- 使用 LSB 标头上的“Provides”字段将脚本命名为“X”。
- 分别使用 LSB 标头上的“Default-Start”和“Default-Stop”字段添加必须启动和停止脚本的运行级别。
- 将“X”设置为优先级为 01 的脚本的 LSB 标头上的“Required-Start”字段:hostname.sh、fake-hwclock 和 mountkernfs.sh。
sudo insserv name_of_your_script_file
使用(不是您在“提供”字段中指定的名称)添加服务
这会移动所涉及脚本的所有必要脚本优先级以匹配依赖项。就我而言:
- S01X.sh
- S02mountkernfs.sh
- S02主机名.sh
- S02假hwclock
- S03udev
来源:http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot
。