debian下服務控制命令


debian下服務控制命令
Linux系統主要啟動步驟

讀取 MBR 的信息,啟動 Boot Manager。加載系統內核,啟動 init 進程, init 進程是 Linux 的根進程,所有的系統進程都是它的子進程。

init 進程讀取 /etc/inittab 文件中的信息,並進入預設的運行級別。通常情況下 /etc/rcS.d/目錄下的啟動腳本首先被執行,然后是/etc/rcN.d/xy 目錄。系統根據 /etc/rcN.d/ 文件夾中對應的腳本啟動 X window 服務器 xorg,Xwindow 為 Linux 下的圖形用戶界面系統。啟動登錄管理器,等待用戶登錄。

系統啟動腳本


Debian GNU/Linux使用SysV模塊作為系統初始腳本。與RedHat一樣,debian使用一個擴展的SysV模塊,而slackware主要是基於BSD的,並為了使用SysV模塊而寫了幾個方便的腳本。本文着重介紹系統的啟動流程、增加/刪除啟動項相關過程。不過從debian 8.0開始,系統使用了systemd機制來管制服務的啟動停止,不在遵守Sys V的規范,所有這些控制工具在其上不一定好用了。

定位SysV目錄
debian與大多數使用SysV模塊的系統一樣,將相關的目錄存放在/etc目錄之下。也就是說,SysV目錄/etc/init.d是腳本自身,而/etc/rc1.d、/etc/rc2.d直到/etc/rc6.d是特殊運行級別的目錄。而管理所有這些的腳本為/etc/rc.d/rc。然而RedHat7.2,是將SysV目錄全部放在/etc/rc.d目錄之下。也就是就說,RedHat使用/etc/rc.d/init.d,而不是 /etc /init.d。為了兼容性,RedHat創建了一些由/etc指向/etc/rc.d下相關目錄的鏈接。

使用debian工具進行工作
RedHat包含了一些用於自動管理SysV初始腳本過程的工具,也就是chkconfig與service。debian 6 之前並沒有包含這些工具,但是卻提供相似的管理工具:update-rc.d與invoke-rc.d。

使用update-rc.d
debian:~# update-rc.d --help
usage: update-rc.d [-n] [-f] remove
update-rc.d [-n] defaults [NN | SS KK]
update-rc.d [-n] start|stop NN runlvl [runlvl] [...] .
-n: not really
-f: force

debian 的update-rc.d與RedHat的chkconfig工具相類似。然而chkconfig是一個二進制程序,而update-rc.d是一個 Perl腳本。這些工具有不同的命令行選項,但是卻執行類似的功能。下表列出了update-rc.d的一些用法。如果要查看完整的信息,我們可以查閱相關的和手冊頁。

命令|功能
update-rc.d -f remove|從所有的運行級別配置目錄中是刪除指定的服務
update-rc.d start|配置服務在運行級別列表中按指定的順序啟動
update-rc.d stop|配置服務在運行級別列表中指定的順序停止

update-rc.d與RedHat的chkconfig之間最大的不同就在於它是要設置所以指向/etc/init.d目錄下服務腳本的運行級別鏈接,而chkconfig是要每一個運行級別單獨配置服務。從本質上來說,這也就意味着每次我們使用update-rc.d改變一個運行級別,我們就不得不改變所有的。例如,下面的命令序列與命令chkconfig -level 2345 inetd off的作用相同:
$ update-rc.d -f inetd remove
$ update-rc.d inetd start 20 2 3 4 5 . stop 20 0 1 6 .

第一個命令移除了所有的指向/etc/init.d/inetd服務腳本的運行級別鏈接,-f標志將會使得update-rc.d即使在inetd腳本本身已經存在的情況仍然進行相應的處理。

第二個命令在每一個運行級別創建了一個服務級別為20的啟動/停止腳本。例如,這會創建一個/etc/rc3.d/K20inetd的符號鏈接來禁止運行級別3中inetd的運行。(在這里我們要注意的是我們要顯示的添加reboot與shutdown運行級別,即0和6,盡管其中所有的服務都會被設置成為“stop“)。作為另外的一個例子,下面所顯示的命令將會在運行級別2到5允許inetd的運行,而在其他的運行級別中則被禁止:debian的update-rc.d最初看起來會叫人有一些迷惑。

例如:
update-rc.d script-name start 90 1 2 3 4 5 . stop 52 0 6 .
start 90 1 2 3 4 5 . : 表示在1、2、3、4、5這五個運行級別中,按先后順序,由小到大,第90個開始運行這個腳本。

stop 52 0 6 . :表示在0、6這兩個運行級別中,按照先后順序,由小到大,第52個停止這個腳本的運行。

使腳本開機自動執行:update-rc.d apache2 defaults 99

update- rc.d命令,是用來自動的升級System V類型初始化腳本,簡單的講就是,哪些東西是你想要系統在引導初始化的時候運行的,哪些是希望在關機或重啟時停止的,可以用它來幫你設置。這些腳本的連接位於/etc/rcn.d/LnName,對應腳本位於/etc/init.d/Script-name。對於已經存的啟動腳本鏈接,必須將其 remove掉,再進行相關的操作。當然是自己寫好的腳本放在該目錄下,則該腳本必須遵守一定的規則,請參見筆者另外一篇文章: rhel和debian啟動腳本編寫

-----------------------------------------
使用invoke-rc.d控制相關服務

debian下與RedHat的service命令作用等同的命令為invoke-rc.d。這兩個命令在大多數情況下的作用是完全相同的。例如,service inetd start與invoke-rc.d inetd start有相同的作用(啟動inetd服務,相應的停止服務的命令為invoke-rc.d inetd stop)。invoke-rc.d命令也有一個額外的我們可以深入研究的命令參數,但是一般來說這兩個命令是相同的。

# invoke-rc.d vsftpd restart
# invoke-rc.d –help
invoke-rc.d, Debian/SysVinit (/etc/rc?.d) initscript subsystem.
Copyright (c) 2000,2001 Henrique de Moraes Holschuh
Usage:
invoke-rc.d [options] [extra parameters]
basename - Initscript ID, as per update-rc.d(8)
action   - Initscript action. Known actions are:
start, [force-]stop, restart, [force-]reload, status
WARNING: not all initscripts implement all of the above actions.
extra parameters are passed as is to the initscript, following the action (first initscript parameter).

...

/etc/inittab中的不同
主要配置系統初始化過程的文件是/etc/inittab。這個文件管理在系統啟動時的腳本,下面的是與其他的發行版本中的inittab文件所不同的幾個地方:
1)debian的默認運行級別是2。
2)debian並不會在/etc/inittab文件中中配置X Window系統顯示管理器。
3)運行級別2與3是相同的,而運行級別4與5是相同的。
4)運行級別4與5只會運行一個虛擬終端,而運行級別2與3卻會運行6個。

----------------------------------------------
小結:上面介紹了debian官方版本里所帶有的相關工具,invoke-rc.d用於對當前系統運行的服務程序進行操作(啟動、停止、重啟、查看狀態等),而 update-rc.d則用於對服務程序運行級別的修改。而redhat系列官方所帶的工具有chkconfig、ntsysv、service。 chkconfig用於調整相關服務的運行級別,而ntsysv則是用於調整其開機是否自動啟動的控制命令,service用來對服務進行(啟動、停止、重啟、查看狀態等)。下面將介紹一些debian系列中的一些非官方的工具(需要通過網絡源進行安裝)。

目前系統服務可用的管理工具集:

依賴於圖形系統
GUI 設置
點擊菜單:System->Preferences ->Sessions,中文為:系統->首選項->啟動應用程序.這里設置的是啟動圖形界面以后自動運行的程序。

修改配置文件
進入 ~/.config/autostart 目錄 ,創建以名字加.desktop的文件,如: thunderbird.desktop(具體創建方法請參考其文檔)。

不依賴於圖形系統的
init
Linux 內核啟動 init ,init進程ID是1,是所有進程的父進程,所有進程由它控制。

runlevel
查看當前的運行級別,Debian桌面默認是2。

Debian中的運行級別
0 - 停機(不要把initdefault設置為0 )
1 - 單用戶模式(單用戶模式,只允許root用戶對系統進行維護)
2 - 多用戶,但是沒有NFS
3 - 完全多用戶模式(字符界面)
4 - 基本不用
5 - X11(圖形界面)
6 - 重新啟動(千萬不要把initdefault設置為6 )

可修通過修改 /etc/inittab 來修改啟動級別

切換運行級別,執行命令:
init [0123456Ss]

即在 init 命令后跟一個參數,此參數是要切換到的運行級的運行級代號,如:用 init 0 命令關機;用 init 6 命令重新啟動,/etc/rc2.d目錄為runlevel=2環境(就是Debian默認情況)的啟動項。
hto@debian:/etc/rc2.d$ ls
README  S20nginx S20xinetd S50rsync S90binfmt-support S99grub-common
...

其中S表示啟動,隨后的數字表示啟動的順序,手動的話將S重命名為K,運行:
update-rc.d script defaults

update-rc.d用法示例

添加啟動項,例如mysql
hto@debian:/etc/rc2.d$ update-rc.d mysql defaults
update-rc.d: warning: /etc/init.d/mysql missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
Adding system startup for /etc/init.d/mysql ...
/etc/rc0.d/K20mysql -> ../init.d/mysql
/etc/rc1.d/K20mysql -> ../init.d/mysql
/etc/rc6.d/K20mysql -> ../init.d/mysql
/etc/rc2.d/S20mysql -> ../init.d/mysql
/etc/rc3.d/S20mysql -> ../init.d/mysql
/etc/rc4.d/S20mysql -> ../init.d/mysql
/etc/rc5.d/S20mysql -> ../init.d/mysql

刪除啟動項
hto@debian:/etc/rc2.d$ update-rc.d -f mysql remove
Removing any system startup links for /etc/init.d/mysql ...
/etc/rc0.d/K20mysql
/etc/rc1.d/K20mysql
/etc/rc2.d/S20mysql
/etc/rc3.d/S20mysql
/etc/rc4.d/S20mysql
/etc/rc5.d/S20mysql
/etc/rc6.d/K20mysql

可以禁用某個服務,不過比較麻煩,方便的方法是sysv-rc-conf。

在各runlevel下服務開機的增加/刪除

sysv-rc-conf可查看/修改不同運行級別的啟動項,可以發現Debian2-5之間的runlevel效果是一樣的。需要對相關服務的運行級別做一個調整。我們可以采用選擇性關閉的方法加速起動,提高系統性能。這里我們安裝一個軟件:apt-get install sysv-rc-conf。在這個軟件里,可以用鍵盤的方向鍵移動,用空格選取,也可以直接用鼠標選取,最后用q保存退出。

rcconf
查看,修改當前運行級別的啟動項,在redhat習慣了ntsysv,在debian下可借助於另一個工具,類似ntsysv,那就是rcconf。跟ntsysv一樣的功能,決定其是否在開機時自啟動。

bashrc
Debian默認shell為bash,.bashrc即為配置文件,在用戶輸入完用戶名和密碼后生效,可添加啟動項目,在桌面環境下可從.profile和.xprofile桌面管理器(KDM、GDM等)讀取配置。

查看KDM讀取配置
cat /etc/kde4/kdm/Xsession

查看GDM讀取配置:
cat /etc/gdm/Xsession

可見GDM會讀取.profile和.xprofile配置文件。

隨桌面啟動的autostart
/etc/xdg/autostart
/usr/share/autostart
/usr/share/gdm/autostart
/usr/share/gnome/autostart
~/.config/autostart
~/.kde/share/autostart
~/.local/share/autostart

這些目錄下的啟動項目是這樣的文件(舉例)

Launchy.desktop

---------------------------------------------------
這些服務控制工具在各個版本的情況


在 debian 6.0 中使用 update-rc.d 無法控制啟動項。在6.0之前'update-rc.d','invoke-rc.d'是可用的,6.0及7.0及現在的8.0這兩個服務控制指令是可用的,不過使用時會警告用戶這個工具將會失效並可能被移除,由於8.0使用了systemd的方式(放棄了之前一直使用System V style)來管理服務,這兩個指令恐怕不再好用了吧。不過'insserv'指令在8.0上都是好用的,服務的啟動停止指令'invoke-rc.d'在各個版本上都是好用的。

---------------------------------------------------

# update-rc.d -f server remove
update-rc.d: using dependency based boot sequencing

經查證,debian為規范管理啟動項目,在系統里已經使用'insserv'來進行此類的操作。

insserv  is a low level tool used by update-rc.d which enables an installed system init script (boot script) by reading the comment header of the script and calculating the dependencies between all scripts.

insserv是比較初級的服務啟動工具,它會被update-rc.d調用用於處理啟動腳本的注釋頭和在腳本間計算依賴關系。

Dependency based boot sequence

Debian was converted to order the boot sequence using the LSB fields in the header of each init.d script. This has removed several bugs in the former boot sequence, and now makes it easier to keep the sequence correct.

In Debian releases prior to 6.0, a service could be added with update-rc.d:

update-rc.d mydaemon defaults

Starting with Debian 6.0, the insserv command is used instead, if dependency-based booting is enabled:

insserv mydaemon

Where mydaemon is an executable init script placed in /etc/init.d. insserv will produce no output if everything went OK. Examine the error code in $? if you want to go sure.

Both the old and the new way requires an init script to be present in /etc/init.d. For dependency-based booting, the script needs to be an LSB init script.

更多信息,請參考: DependencyBasedBoot

----------------------------------------------------
debian下一些服務的名稱和基本的解釋:

acpi-support:這個是關於電源支持的默認是1,2,3,4,5下啟動,我認為你可以把它調整到s級別。

acpid:acpi的守護程序,默認是2-5開啟,我認為可以不用管。

alsa:alsa聲音子系統,應該不用開啟它。

alsa-utils:這個服務似乎取代了alsa,所以開啟這個就可以了,我在S級別開啟它。

anacron:這是一個用於執行到時間沒有執行的程序的服務。

apmd:也是一種電源管理,我認為電腦如果不是很老,它就沒有開啟的必要了。

atd:和anacron類似,與定時執行計划任務類似。

bluez-utiles:藍牙服務,沒有的話可以關了。

bootlogd:似乎使用來寫log的,安全期間開着他也許比較好。

cron:指定時間運行程序的服務,所以開着比較好的。

cupsys:打印機服務,所以如果就開啟吧。

dbus:消息總線系統,非常重要,一定要開。

dns-clean:撥號連接用的。

evms:企業卷管理系統。

fetchmail:用於郵件守護。

gdm:gnome桌面管理器。

halt:關機用的,不要更改。

hdparm:沒有ide硬盤也就不用開啟它。

hotkey-setup:這個是給某些品牌筆記本設計的熱鍵映射,台式機用戶請關了它。

hotplug:這個是用於熱插拔的,在某些電腦上關閉它會使聲卡無效,請在S級別開啟它。

hplip:hp打印機專用的,應該可以關了它。

ifrename:網絡接口重命名。

ifupdown:這個使用來打開網絡的,開着它。

ifupdown-clean:同上。

klogd:linux守護程序,接受來自內核和發送信息到syslogd的記錄,並記錄為一個文件,所以請開着它。

linux-restricted-modules-common:這個使用來使用受限制的模塊的,你可以從/lib/linux-restricted-modules下查看,如果沒有什么,你可以關掉它。

lvm:邏輯卷管理器,如果沒有用可以關了它。

makedev:用來創建設備到/dev/請不要動它。

mdamd:管理raid用,如果沒有請關閉它。

module-init-tools 從/etc/modules:加在擴展模塊的,這個一般開着。

networking:增加網絡接口和配置dns用,將它開啟。

ntp-server:與時間服務器進行同步的。

pcmcia:激活pcmica設備。

powernowd:用於管理cpu的客戶端程序,如果有變頻功能,比如amd的quite':cool 那么就開啟它吧。

ppp:撥號用的。

ppp-dns:同上。

readahead:預加載服務,讓我想起了win的預讀,當然他們不同,它會使啟動變慢3-4妙,可以關了它。
reboot:重啟用的,不要動。

rmnologin:如果發現nologin,就去除它,在筆記本上不用開啟。

rsync:rsync協議守護,請視情況而定。

screen-cleanup:一個清除開機屏幕的腳本,隨便。

sendsigs:重啟和關機時向所有進程發送消息。

single:激活但用戶模式。

stop-bootlogd:從2,3,4,5級別停止bootlogd。

sudo:這個不用說吧。

sysklogd:用於記錄系統日志信息。

udev:用戶空間dev文件系統。

udev-mab:同上。

umountfs:用來卸載文件卷的。

urandom:生成隨機數的。

usplash:那個漂亮的啟動畫面,但是關了它,它也存在,所以想關他需要把內核起動參數中的splash一句刪掉。

vbesave:顯卡bios配置工具。

xorg-common:設置x服務ice socket。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM