我正在尝试在运行级别 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 之前调用的脚本。我尝试了以下行inittab
:d667: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
,或者看看是否可以通过内核线程做您想做的事情。