有谁知道为什么系统在启动时不会执行rc.local中的脚本代码? 我有一个configuration后的bash脚本,我想在VMware ESX(Red Hat)的初始安装之后运行,由于某种原因,似乎并没有执行。 我有设置logging其执行开始,甚至进度,以便我可以看到有多远,以防万一它在某些时候失败,但即使当我看着那个日志,我发现,甚至没有开始执行脚本代码。 我已经检查过脚本有执行权限(755),还有什么我应该看的?
这是我的代码的前几行:
#!/bin/sh echo >> /tmp/configLog "" echo >> /tmp/configLog "Entering maintenance mode"
那么,/ tmp / configlog是否存在? 如果是这样,你的脚本正在发射,而这只是在某个地方死去。
从基础开始:
touch / tmp / itworked
那工作? 重启之后,/ tmp / itworked是否存在? 如果是这样,那么rc.local正在执行。
/ bin / myscript&
在里面。 运行需要很长时间吗? init脚本中的某处可能会有一个超时,以防止用户停止启动过程 – 如果存在的话,后台进程将使您得到解决。
/ bin / sh /etc/rc.local
从命令行?
这不是简单的像打字错误吗? 应该这样:
#!/bin/hash
真的是:
#!/bin/bash
?
(就像CK在评论中说的,现在我看)
你确定你的系统支持rc.local吗? 如果没有logging,则需要遵循所有的init脚本。 你从/ etc / inittab开始。 (你可能会发现从那里你去/etc/rc.d/rc)
在某些系统上,/etc/rc.d/rc.local通过symlink /etc/rc.d/rcX.d/S99local来支持。 (其中X是适当的运行级别)。
如果您使用的是RedHat,那么没有真正的理由不创build您自己的init脚本,将它添加到脚本中的/etc/rc.d/init.d,chkconfig –add脚本和chkconfig。 这将使正确的符号链接到/etc/rc.d/rcX.d目录中,并使得init脚本易于部署或禁用。
使用过时的rc.local对于快速入侵很有帮助,如果你的系统支持它的话,但对于某些重要或永久的东西来说,这并不合适。
不确定在linux上处理init脚本是连续的还是并行的,但Solaris系统是按顺序启动脚本的。 如果以前的初始化脚本尚未完成(有时候由于sendmail / DNS的依赖性,我可能会看到这种情况),后面的脚本的启动速度不如您想象的那么快。
使用ps来查看早期的初始化脚本是否仍在运行。
也许在rc.local脚本中有语法错误。 如果您尝试在系统启动后从命令行手动运行它,那么它是否正确执行?
你检查了包含rc.local文件的目录的权限吗?
你的代码不应该看起来更像这样吗? 3变化在这里:
#!/bin/bash echo "" >> /tmp/configLog echo "Entering maintenance mode" >> /tmp/configLog
rc.local是运行启动脚本的BSD方式。 尽pipe许多Linux版本都支持在启动时运行一个名为“rc.local”的文件,但我记得这些文件需要一堆符号链接和其他胶水才能工作,因为Linux遵循Solaris处理启动脚本的方式。
SELinux的。
尝试使用getenforce来查看selinux是否打开。 它将返回1或强制开启。 然后,如果是检查dmesg,看看是否有一个selinux相关的错误,看起来可能是做你的脚本。
如果第一行真的说#!/ bin / hash,那么你会得到类似这样的错误:
-bash: ./test.sh: /bin/hash: bad interpreter: No such file or directory
当它运行。
您可能还想检查该脚本是否具有执行权限。