![/etc/rc.local 和 /etc/init.d/rc.local 有什么区别?](https://linux22.com/image/48718/%2Fetc%2Frc.local%20%E5%92%8C%20%2Fetc%2Finit.d%2Frc.local%20%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
我想iptables
在我的新规则中添加一条永久规则VPS
,经过简短的谷歌搜索后,我惊讶地发现有两个地方可以添加此规则,这似乎是相同的:/etc/rc.local
和/etc/init.d/rc.local
。也许有人知道为什么有两个地方可以放置简单的启动代码?它是 Linux 风格特有的吗(但 ubuntu 两者都有!)?或者其中之一已被弃用?
答案1
/etc/init.d
在 ubuntu 上维护,以向后兼容 sysvinit 内容。如果您实际查看,/etc/init.d/rc.local
您会看到(也是来自 12.04 LTS 服务器):
#! /bin/sh
### BEGIN INIT INFORMATION
# Provides: rc.local
# Required-Start: $remote_fs $syslog $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
### END INIT INFO
和“运行/etc/rc.local”正是它的作用。全文/etc/rc.local
是:
#!/bin/sh -e
#
# 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.
exit 0
我猜这样做的目的是提供一个非常简单的地方来放置您想要在启动时运行的 shell 命令,而不必处理/etc/init.d/rc.local
.
所以它实际上是一个服务,并且可以这样运行。我echo
在/etc/rc.local
and 中添加了一行:
»service rc.local start
hello world
但是,我不相信 upstart 的/etc/init
(不是 init.d!)目录中的任何内容都引用了它:
»initctl start rc.local
initctl: Unknown job: rc.local
upstart中有一些“rc”服务:
»initctl list | grep rc
rc stop/waiting
rcS stop/waiting
rc-sysinit stop/waiting
但这些似乎都与 rc.local 无关。
答案2
这更多的是一个特定于发行版的事情。 (比如,你不会在 CentOS 中找到不同的 rc.local)。
现在谈到您的实际问题,我认为在 /etc/init.d/rc.local 中添加任何内容都会使其作为“服务”启动,而 /etc/rc.local 中的任何内容只会在启动时启动该脚本。
我不太确定为什么 Ubuntu 仍然保留它们? (也许其他人可能会对这部分有所启发!!)