我一直在努力弄清楚为什么 rc.local 在启动时无法执行。
该文件本身是可执行文件,它是从 /etc/rc2.d 调用的。
此外,从命令行调用该文件时不会返回任何错误。
还有什么想法可以检查什么来找出为什么无法运行?
答案1
因为您说rc.local
手动运行时它会正确执行,所以立即想到的两件事是:
- 启动时出现问题,但您自己运行它时却能正常工作。也许您尝试运行启动时不在 PATH 中的程序。
/etc/rc.local
确实没有在启动时运行。
在这两种情况下,我首先要做的就是输入类似
/usr/bin/printenv > /var/tmp/rc.local-$(date +%T)
rc.local
作为行后的首行#!/bin/sh
。每次运行时,都会将环境变量打印到带有时间戳的文件中。(不要将文件写入,/tmp
因为该文件在启动时会被清空。)手动运行/etc/rc.local
并快速查看生成的文件(它将被命名为类似/var/tmp/rc.local-21:14:35
)。然后重新启动系统。
您应该有两个文件/var/tmp
(或任何地方)可以进行比较。如果您只有第一个文件,/etc/rc.local
则实际上没有被调用。如果您有两个文件,请比较它们。后者将具有非常稀疏环境和 PATH。查看rc.local
脚本,看看您尝试运行的程序是否依赖于启动时环境中不存在的某个变量或 PATH 组件。如果发现问题,请将必要的初始化操作添加到rc.local
。