为什么我的 rc.local 没有在启动时运行?

为什么我的 rc.local 没有在启动时运行?

这是一个重复的问题,但我不认为这是一个重复的问题,因为对于遇到同样问题的人给出的答案对我来说都不起作用。

rc.local 不会在启动时运行。它非常简单,包含以下内容:

#!/bin/sh
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

sleep 10

echo "this was written by rc.local" > /home/simon/start_text

exit 0

这里之所以有“sleep 10”,是因为它是另一个问题中给出的可能的解决方案。

“#!/bin/sh” 已删除“-e”,因为这也是一个建议的解决方案。

/etc/rc.local 是可执行文件,且归 root 所有。

-rwxrwxrwx 1 root root 396 Jan 24 06:06 rc.local

手动运行启动脚本可以正常工作,例如“/etc# ./rc.local”或“:/etc/init.d# ./rc.local start”。这两者都将导致测试文件(start_text)被写入。

我在 Virtualbox 中运行 12.04,我不确定这是否会产生任何区别。

我想不出下一步该检查什么。请提供想法。

答案1

根据Ubuntu 文档,Ubuntu 中的默认系统 shell 是 Dash而不是 Bash,而默认登录 shell 是 Bash。输出ls -al /bin/sh显示 /bin/sh 是 Dash(最有可能)还是 Bash 的符号链接。在我的情况下是 Bash:

lrwxrwxrwx 1 root root 4 Apr 8 2014 /bin/sh -> bash

Dash 将无法解释echo "this was written by rc.local" > /home/simon/start_text/etc/rc.local因此您需要指定使用 Bash 来解释命令,如下所示

/bin/bash echo "this was written by rc.local" > /home/simon/start_text


您可以将默认系统 shell 更改为 Bash,但不建议这样做通过删除并重新创建符号链接:

rm -f /bin/sh

sudo ln -s /bin/bash /bin/sh

或者返回 Dash:

rm -f /bin/sh

sudo ln -s /bin/dash /bin/sh

相关内容