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