/etc/rc.local和/etc/init.d/rc.local有什么区别?


30

我想在iptables我的新规则中添加一条永久性规则VPS,在经过简短的Google搜索后,我很惊讶可以在该规则中添加两个地方,这似乎是相同的:/etc/rc.local/etc/init.d/rc.local。也许有人知道为什么在两个位置放置简单的启动代码?它是特定于Linux的风味(但ubuntu兼有!)吗?还是其中之一被弃用?


1
一个应该是到另一个的符号链接。
伊格纳西奥·巴斯克斯

2
@ IgnacioVazquez -艾布拉姆斯在Ubuntu服务器12.04 LTS的x86他们是完全不同:(。
grigoryvp

1
@ IgnacioVazquez-Abrams:在Debian上,它们似乎也有所不同。
伊曼纽尔·伯格

3
值得一试:我问一个问题有关/etc/rc.local而回。
伊曼纽尔·伯格

Answers:


31

/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命令,而不必处理in中的stop | start服务/etc/init.d/rc.local

因此,它实际上是一项服务,可以照此运行。我echo/etc/rc.local和添加了一行:

»service rc.local start
hello world

但是,我不认为新贵的/etc/init(而不是init.d!)目录中的任何内容都引用了它:

»initctl start rc.local
initctl: Unknown job: rc.local

新贵中有一些“ rc”服务:

»initctl list | grep rc
rc stop/waiting
rcS stop/waiting
rc-sysinit stop/waiting

但是这些似乎都与rc.local没有任何关系。


5

这更多是特定于发行版的。(例如,您将在CentOS中找不到其他的rc.local)。

现在要问您的实际问题,我认为在/etc/init.d/rc.local中添加任何内容都可以使其作为“服务”启动,而/etc/rc.local中的任何内容都只是在启动时启动该脚本。

我不太确定为什么Ubuntu仍然会同时维护这两者?(也许其他人可能对此部分有所了解!)


“作为服务”执行的命令与“在引导时简单启动”的代码之间有什么区别?是某种安全性还是什么?
grigoryvp

两者之间的核心区别本质上是服务和流程。;)我想基本意图只是安全性。您可能会发现此链接很有趣:unixmen.com/managing-your-services-and-processes-in-linux
实用的

这是不对的!它们不是相同的脚本,但是它们一项服务- /etc/init.d/rc.local停止启动的东西/etc/rc.local(请参阅我的答案以获取更多详细信息)。
goldilocks 2012

@goldilocks:感谢您提供的描述性和详尽的答案,但我不清楚您提到的答案的哪一部分不正确?将一种服务称为“服务”意味着它可以完成“开始”和“停止”工作,而另一种则只是一个过程。如果我在这里没有任何意义,请纠正我。
实用的

2
@pragmatic因为/etc/rc.local脚本是由脚本控制的可执行过程,所以/etc/initd/rc.local就像(例如)/bin/syslog将是由脚本控制的可执行过程/etc/initd/syslog。您明确地说这/etc/rc.local只是一个启动脚本,而/etc/initd/rc.local不是一个完全独立的运行级别服务。
goldilocks 2012
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.