我在 Linux 机器上有一个自制的 init.d 脚本,它可以在 Debian 4 和 Debian 5 上正常工作,但在 Debian 6(全新安装)中,它仅在系统启动时执行,而不是在重新启动之前执行。
该脚本实际上是这样的:
### BEGIN INIT INFO
# Provides: selfheal
# Required-Start:
# Required-Stop:
# X-Start-Before: mountall
# X-Stop-After: umountfs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: selfheal tool
# Description: Saves/restores the user partition at (re)boot
### END INIT INFO
echo $0 $*
sleep 3
# some useful stuff follows here...
我reboot
看到系统正在切换runlevel 6
并卸载文件系统(见X-Stop-After: umountfs
上文)。我的脚本没有任何生命迹象selfheal
。
在系统启动但是,我看到该echo
行并且脚本正在执行。
我已经使用以下命令安装了脚本:
rm /etc/rc*.d/[SK]??selfheal && update-rc.d selfheal defaults
那里没有错误/警告。符号链接存在:
root@intermodul:~# ls -al /etc/rc6.d/
total 12
drwxr-xr-x 2 root root 4096 May 16 16:09 .
drwxr-xr-x 68 root root 4096 May 16 16:07 ..
<snip>
lrwxrwxrwx 1 root root 18 May 16 15:09 K09umountfs -> ../init.d/umountfs
lrwxrwxrwx 1 root root 18 May 16 16:09 K10selfheal -> ../init.d/selfheal
lrwxrwxrwx 1 root root 20 May 16 15:09 K10umountroot -> ../init.d/umountroot
lrwxrwxrwx 1 root root 16 May 16 15:09 K11reboot -> ../init.d/reboot
-rw-r--r-- 1 root root 351 Jan 1 06:34 README
请注意,Debian 6 带来了并发启动,我猜我的“INIT INFO”有问题。
这里有什么问题吗?
更新
CONCURRENCY=none
该脚本在设置时执行/etc/init.d/rc
,但我希望启用 makefile 并发性。那么,为什么脚本不能在 makefile 并发模式下执行呢?
答案1
我找到了原因:
该脚本需要在该部分中使用以下行BEGIN INIT INFO
,以便在我的脚本完成之前不会卸载根文件系统:
Should-Stop: umountroot
这会导致umountroot
“依赖”我的脚本。