在运行级别 1 中运行脚本

在运行级别 1 中运行脚本

我正在尝试在运行级别 1 中运行脚本/etc/inittab。我想要运行的脚本如下所示:

#!/bin/bash
while [ 1 ]
do
  #do something
  sleep 1
  #do something
  sleep 1
done

inittab行如下所示:d666:123456:respawn:/root/script_to_run.sh

在运行级别 2-6 中一切正常。当我切换到运行级别 1 ( init 1) 时,脚本停止并且不再执行。

另外,我正在尝试处理在进入运行级别 0 之前调用的脚本。我尝试了以下行inittabd667:0:wait:/root/script_to_run_right_before_runlevel_0.sh

答案1

Debian 文档并不明确,init(8)仅警告运行级别 S、0、1、6 是保留的,并且:

在 Debian 系统上,进入运行级别 1 会导致所有进程被终止,但内核线程、执行终止的脚本及其会话中的其他进程除外。因此,从运行级别 1 返回多用户运行级别是不安全的:在运行级别 S 中启动且正常运行所需的守护进程不再运行。系统应重新启动。

运行级别 1 为/etc/inittab

l1:1:wait:/etc/init.d/rc 1

/etc/init.d/rc 1将调用/etc/rc1.d/S*包括S01killprocs杀死它能找到的大多数程序,以及S21single执行“ exec init -t1 S”以切换到单用户模式的命令,因此运行级别 1 的持续时间很短。单用户模式“S”中的命令/etc/inittab为:

~~:S:wait:/sbin/sulogin

这意味着init只会等待,直到等待sulogin返回,然后再执行其他任何操作。

简而言之,运行级别“1”和“S”在 Debian 中是“不干涉的”(可能在大多数其他 unixen 中也是如此)。

如果您将 inittab 条目放在系统“S”条目上方,那么init重生和S01killprocs脚本将会争夺一段时间(如果没有运行系统日志,您可能无法观察到这一过程),这可能很不寻常,而且可能不会按照您想要的方式运行。

可能/etc/initscipt通过修改启动脚本或实现监控和记录各种操作,您可以实现一些所需的功能init。这些是真的这是管理工作系统的好方法,因此我建议先在虚拟机中进行实验 ;-) 。

我认为您的其他选择(看起来都不太有吸引力)是尝试不同的方法init,或者看看是否可以通过内核线程做您想做的事情。

相关内容