/etc/init.d/something和/etc/rc.local的确切区别是什么?

时间:2014-02-20 07:47:27

标签: linux shell

当我需要在Ubuntu中创建一个autostartup任务时。我总是创建一个新文件并在其中编写一堆命令。接下来,我将此文件放在/etc/init.d/目录中。然后,我为这个文件设置了chmod 755。最后,我执行命令行“update-rc.d file_name defaults”来激活它。它就像一个魅力。

最近,我发现还有另一种方法可以使它与上面的例子相同。这是在/etc/rc.local中附加一个新的命令行(将它放在“exit 0”行的上方)。

那么你能说出它们之间的区别吗?非常感谢你!

1 个答案:

答案 0 :(得分:5)

要理解这个问题,首先应该知道* nix中的run level。 * nix中有6个总运行级别。我不会显示每个运行级别的详细信息,您可以阅读更多相关信息here

每个运行级别在/etc/下都有不同的位置:

% cuonglm at ~
% ls -l /etc/rc* -d
drwxr-xr-x 2 root root 4096 Feb 20 10:44 /etc/rc0.d
drwxr-xr-x 2 root root 4096 Feb 20 10:44 /etc/rc1.d
drwxr-xr-x 2 root root 4096 Feb 20 10:44 /etc/rc2.d
drwxr-xr-x 2 root root 4096 Feb 20 10:44 /etc/rc3.d
drwxr-xr-x 2 root root 4096 Feb 20 10:44 /etc/rc4.d
drwxr-xr-x 2 root root 4096 Feb 20 10:44 /etc/rc5.d
drwxr-xr-x 2 root root 4096 Feb 20 10:44 /etc/rc6.d
-rwxr-xr-x 1 root root  306 Feb  4 18:58 /etc/rc.local
drwxr-xr-x 2 root root 4096 Feb  4 19:01 /etc/rcS.d

每次系统启动时,都会执行coressponding运行级别文件夹下的某些脚本(以S开头)。 I.E如果您启动到run level 2/etc/rc2.d/下的某些脚本将被执行。如果您显示这些文件夹的内容,您将看到脚本是/etc/init.d/下的脚本符号链接。

% ls -l /etc/rc2.d/
total 4
-rw-r--r-- 1 root root 677 Jul 27  2012 README
lrwxrwxrwx 1 root root  20 Feb 19 11:26 S20kerneloops -> ../init.d/kerneloops
lrwxrwxrwx 1 root root  27 Feb 19 11:26 S20speech-dispatcher -> ../init.d/speech-dispatcher
lrwxrwxrwx 1 root root  20 Feb 19 11:26 S50pulseaudio -> ../init.d/pulseaudio
lrwxrwxrwx 1 root root  15 Feb 19 11:26 S50rsync -> ../init.d/rsync
lrwxrwxrwx 1 root root  15 Feb 19 11:26 S50saned -> ../init.d/saned
lrwxrwxrwx 1 root root  19 Feb 19 11:26 S70dns-clean -> ../init.d/dns-clean
lrwxrwxrwx 1 root root  18 Feb 19 11:26 S70pppd-dns -> ../init.d/pppd-dns
lrwxrwxrwx 1 root root  14 Feb 19 11:26 S75sudo -> ../init.d/sudo
lrwxrwxrwx 1 root root  17 Feb 20 10:44 S91apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root  22 Feb 19 11:26 S99acpi-support -> ../init.d/acpi-support
lrwxrwxrwx 1 root root  21 Feb 19 11:26 S99grub-common -> ../init.d/grub-common
lrwxrwxrwx 1 root root  18 Feb 19 11:26 S99ondemand -> ../init.d/ondemand
lrwxrwxrwx 1 root root  18 Feb 19 11:26 S99rc.local -> ../init.d/rc.local

这使您能够控制您的服务在哪个运行级别下运行。您可以仅在run level 2中运行服务,在其他运行级别停止。但请记住,只有一个"运行级别"在启动时执行,即执行运行级别2或3或4,而不执行2或3然后执行4.

所以它引导你到这里的差异。在您启动的每个运行级别中,执行此运行级别的脚本后,将执行脚本/etc/rc.local。这意味着/etc/rc.local将在引导过程结束时运行,无论您启动的运行级别如何。