2014-02-20 16 views
0

當我需要在Ubuntu中創建自動啓動任務時。我總是創建一個新文件並在其中寫入一堆命令。接下來,我將這個文件放在/etc/init.d/目錄中。然後,我爲這個文件設置了chmod 755。最後,我執行命令行「update-rc.d file_name defaults」來激活它。它就像一個魅力。/etc/init.d/something和/etc/rc.local的區別是什麼

最近,我發現有另一種方法可以使它與上面的例子一樣。這是將一個新的命令行添加到/etc/rc.local中(將它放在「exit 0」行之上)。

所以你能分辨它們之間的區別嗎?非常感謝你 !

+0

大多數Linux發行版都將[systemd](http://en.wikipedia.org/wiki/Systemd)。另外,閱讀'/ etc/init.d/skeleton',並從它自己的'/ etc/init.d/yourapp'文件中獲取靈感...... –

+0

rc.local是一個獨特的文件。使用init.d,您可以爲每個服務提供一個腳本,控制執行順序和運行級別。 – PeterMmm

回答

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 

每次系統啓動時,一些腳本(與S開始)下coressponding運行級別文件夾執行。 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將在啓動過程結束時運行,而不管啓動的運行級別如何。

+0

要添加一些進一步說明,腳本名稱傾向於以「S」開頭以在進入運行級別時啓動服務,在離開運行級別時以「K」開始殺死服務。緊跟在初始S或K後面的數字(0-99)允許對運行腳本的ORDER進行細粒度控制 - 這種方法比rc.local更具優勢。 –

相關問題