当我需要在Ubuntu中创建一个autostartup任务时。我总是创建一个新文件并在其中编写一堆命令。接下来,我将此文件放在/etc/init.d/目录中。然后,我为这个文件设置了chmod 755。最后,我执行命令行“update-rc.d file_name defaults”来激活它。它就像一个魅力。
最近,我发现还有另一种方法可以使它与上面的例子相同。这是在/etc/rc.local中附加一个新的命令行(将它放在“exit 0”行的上方)。
那么你能说出它们之间的区别吗?非常感谢你!
答案 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
将在引导过程结束时运行,无论您启动的运行级别如何。