- 轉自:http://www.2cto.com/os/201202/121249.html
在linux系統啟動的時候,我們可以看到很多服務性程式一個接一個的被啟動(就是那些後面有一個蘭色[OK]的行),這些在後臺執行的程式為我們使用計算機起了很重要的作用,以這種方式執行的程式有以下特點:
開機啟動,關機停止(廢話!關機了還執行啊???)
後臺執行
通過service 命令控制或檢視對應的程式的執行狀態
恩,不錯,那怎麼把我們自己編制的程式做成這樣的一個服務呢?
廢話少說,主要分以下3步:
1、把可執行程式放到一個linux系統可以找到的地方。
在linux命令提示符下輸入env ,回車後可看到環境變數,裡面有一項PATH的,對,這項裡所指定的目錄都是系統可找到的地方,把我們的可執行程式放入其中的一個目錄下即可,我們一般放在/usr/sbin/目錄下(放什麼有放什麼的地方,最好不要亂放)。
2、在目錄/etc/init.d/ 下,新建一個以服務名為檔名的檔案。
如果我們開啟目錄/etc/init.d/,看到的檔案其實都是服務程式檔案,每個檔案的內容都大同小異,我們會看到,這裡的檔案在檔案結構上幾乎是一樣 的。幾乎每個檔案 都有start、stop、restart和status這樣的標誌,對,我們新建的這個檔案也具有相同的結構,只是在這些標誌內部把相應的可執行程式換 成我 們自己的可執行程式即可,知道怎麼做了嗎?那就是:複製——修改——儲存。
3、在目錄/etc/rc3.d/ 下,新建一個指向在第2步中建立的服務檔案的符號連線檔案。
開啟目錄/etc/rc3.d/ ,我們將看到這裡都是符號連線檔案(linux系統中的符號連線相當於windows中的快捷方式)。採用以下命令格式:
ln -sf 目標檔名 連線檔名
連線檔名稱採用“SXX目標檔名”的格式,其中XX一般是一個從1到100的整數,它表示啟動優先順序,數字越大,優先順序越低,比如:服務A的執行要依賴服務B,那A的XX數字就應該大於B的。後跟“目標檔名”是為了一目瞭然,一看就知道是哪個檔案的符號連線。
目錄/etc/rc3.d/ 是系統啟動時自動搜尋的目錄,該目錄下的符號連線檔案的目標檔案,都將被執行,這就是在這個目錄建立符號連線的原因——為了開機就執行。
好了,完成以上3個步驟,你就把自己的一個可執行程式做成系統的一個服務了,它具有我們一開始說的幾個特定。我們可以用service命令控制這個程式了:
啟動:service hdz_service start
停止:service hdz_service stop
重啟:service hdz_service restart
上面的hdz_service 為服務名,也就是在第2步中建立的檔名。
不過,好象感覺比較麻煩,能否把這幾個步驟自動化一下?這樣在一臺新機子上部署就方便了,也更象回事-_^!辦法當然有了,還記得我們那個記錄程式碼檔案之間依賴關係的makefile檔案嗎?呵呵,我們在這裡要用到它了。
在makefile檔案中新增一個標誌,並在該標誌下新增和下面類似的程式碼:
install:
cp ./hdz_pro /usr/sbin/
cp ./hdz_service /etc/init.d/
cd /etc/init.d/
chmod +x hdz_service
cd /etc/rc3.d/
ln -sf ../init.d/hdz_service ./S99hdz_service
在標誌install下的沒一句話,前面一定要留空白,這不僅是有利於閱讀,更是一個要求,makefile檔案要求每一句可執行語句前都要有空白(空格或tab)。
上面程式碼中的hdz_pro 和hdz_service 分別是可執行檔名和服務名,這兩個名稱換成你自己的就行了,操作時用以下命令:
make install
執行完就一切OK了,簡單吧?
大家在看我寫的東東時,時不時會碰到“hdz”這樣的東西,這是我名字的縮寫,說明這正是要替換的。
-----------------------------------------------------
一般系統的執行級別是在 /etc/inittab 裡面指定的。有一行是類似
id:5:initdefault:
或者
id:3:initdefault:
的,這裡的數字就是系統的預設執行級別。假設是 5。
啟動服務的是依靠 /etc/init.d/ 下的指令碼啟動的。這些都是普通的 shell 指令碼,系統在呼叫的時候,如果是啟動服務,則傳入 start 作為引數;stop 表示停止;restart 表示重啟。因此你可以寫一個指令碼,比如簡單的如這樣:
#!/bin/sh
ARG=$1
case $ARG in
start):
nohup /path/to/your/program &
;;
stop):
pkill program
;;
restart):
pkill program
nohup /path/to/your/program &
;;
esac
把這個指令碼放在 /etc/init.d 裡面,譬如 /etc/init.d/your_prog
然後加入相應執行級別的連結:在 5 級啟動則
ln -s /etc/init.d/your_prog /etc/rc5.d/S100your_prog
ln -s /etc/init.d/your_prog /etc/rc0.d/K100your_prog
這裡兩個數字都可以用對應目錄裡最大的數字,因為沒有別的服務依賴你的服務。
這樣表示,當系統進入 init level 5 的時候啟動你的程式,進入 init level 0 的時候停止你的程式。
----------------------------------------------------------
系統服務介紹
1. alsasound :Alsa音效卡驅動守護程式。
2. acpid:acpid(Advanced Configuration and Power Interface)是為替代傳統的APM電源管理標準而推出的新型電源管理標準。通常膝上型電腦需要啟動電源進行管理。
3. atalk:AppleTalk網路守護程序。
4. amd: 自動安裝NFS守護程序。
5. anacron:一個自動化執行任務守護程序。
6. apmd:apmd(Advanced Power Management)是高階電源管理。
7. arptables_jf :為arptables網路的使用者控制過濾的守護程序。
8. arpwatch: 記錄日誌並構建一個在LAN介面上看到的乙太網地址和IP地址對資料庫。
9. autofs:自動安裝管理程序automount,與NFS相關,依賴於NIS伺服器。
10. bootparamd:引導引數伺服器,為LAN上的無盤工作站提供引導所需的相關資訊。
11. bluetooch:藍芽伺服器守護程序。
12. crond :cron是Unix下的一個傳統程式,該程式週期地執行使用者排程的任務。比起傳統的Unix版本,Linux版本添加了不少屬性,而且更安全,配置更簡單。類似計劃任務。
13. chargen:使用tcp協議的chargen server,chargen(Character Generator Protocol)是一種網路服務,主要功能是提供類似遠端打字的功能。
14. chargen-udp:使用UDP協議的chargen server。
15. cpuspeed:監測系統空閒百分比,降低或加快CPU時鐘速度和電壓從而在系統空閒時將能源消耗降為最小,而在系統繁忙時最大化加快系統執行速度。
16. dhcpd:動態主機控制協議(Dynamic Host Control Protocol)的服務守護程序。
17. cups:cups(Common UNIX Printing System)是通用UNIX列印守護程序。
18. cups-config-daemons:cups列印系統切換守護程序。
19. cups-lpd:cups行列印守護程序。
20. daytime:使用TCP 協議的Daytime守護程序,該協議為客戶機實現從遠端伺服器獲取日期和時間的功能。預設埠:13。
21. daytime-udp:使用UDP 協議的Daytime守護程序。
22. dc_server:使用SSL安全套接字的代理伺服器守護程序。
23. dc_client:使用SSL安全套接字的客戶端守護程序。
24. diskdump:伺服器磁碟備份守護程序。
25. echo:伺服器回顯客戶資料服務守護程序。
26. echo-udp:使用UDP協議的伺服器回顯客戶資料服務守護程序。
27. eklogin:接受rlogin會話鑑證和用kerberos5加密的一種服務的守護程序。
28. gated :閘道器路由守護程序。它支援各種路由協議,包括RIP版本1和2、DCN HELLO協議、OSPF版本2以及EGP版本2到4。
29. gpm:gpm(General Purpose Mouse Daemon )守護程序為文字模式下的Linux程式如mc(Midnight Commander)提供了滑鼠的支援。
30. gssftp: 使用kerberos 5認證的ftp守護程序
31. httpd:Web伺服器Apache守護程序。
32. inetd :因特網操作守護程式。
33. innd:Usenet新聞伺服器守護程序。
34. iiim:中文輸入法伺服器守護程序。
35. iptables:iptables防火牆守護程序。
36. irda:紅外埠守護程序。
37. isdn:isdn啟動和中止服務守護程序。
38. krb5-telnet:使用kerberos 5認證的telnet守護程序。
39. klogin:遠端登陸守護程序。
40. keytable:該程序的功能是轉載在/etc/sysconfig/keyboards裡定義的鍵盤對映表,該表可以通過kbdconfig工具進行選擇。您應該使該程式處於啟用狀態。
41. irqbalance:對多個系統處理器環境下的系統中斷請求進行負載平衡的守護程式。如果你只安裝了一個CPU,就不需要載入這個守護程式。
42. kshell :kshell守護程序。
43. kudzu:硬體自動檢測程式。
44. ldap:ldap(Lightweight Directory Access Protocol)目錄訪問協議伺服器守護程序。
45. lm_seroems:檢測主機板工作情況守護程序。
46. lpd :lpd是老式列印守護程式,負責將lpr等程式提交給列印 作業。
47. mdmonitor:RAID相關裝置的守護程式。
48. messagebus:D-BUS是一個庫,為兩個或兩個以上的應用程式提供一對一的通訊。
49. microcode_ctl:可編碼以及傳送新的微程式碼到核心以更新Intel IA32系列處理器。
50. mysqld: 一個快速高效可靠的輕型SQL資料庫引擎守護程序。
51. named:DNS(BIND)伺服器守護程序。
52. netplugd:netplugd(network cable hotplug management daemon)守護程式,用於監控一個或多個網路介面的狀態,當某些事件觸發時執行一個外部指令碼程式。
53. netdump:遠端網路備份伺服器守護程序。
54. netfs:Network Filesystem Mounter,該程序安裝和解除安裝NFS、SAMBA和NCP網路檔案系統。
55. nfs:網路檔案系統守護程序。
56. nfslock:NFS是一個流行的通過TCP/IP網路共享檔案的協議,此守護程序提供了NFS檔案鎖定功能。
57. ntpd:Network time Protocol daemon(網路時間校正協議)。ntpd是用來使系統和一個精確的時間源保持時間同步的協議守護程序。
58. network:啟用/關閉啟動時的各個網路介面守護程序。
59. psacct:該守護程序包括幾個工具用來監控程序活動的工具,包括ac,lastcomm, accton 和sa。
60. pcmcia:主要用於支援膝上型電腦介面守護程序。
61. portmap:該守護程序用來支援RPC連線,RPC被用於NFS以及NIS 等服務。
62. postgresql: PostgreSQL 關係資料庫引擎。
63. proftpd: proftpd 是Unix下的一個配置靈活的ftp伺服器的守護程式。
64. pppoe:ADSL連線守護程序。
65. random :儲存和恢復系統的高質量隨機數生成器,這些隨機數是系 統一些隨機行為提供的。
66. rawdevices:在使用叢集檔案系統時用於載入raw裝置的守護程序。
67. readahead、readahead_early:readahead和readahead_early是在Fedora core 2中最新推出的兩個後臺執行的守護程式。其作用是在啟動系統期間,將啟動系統所要用到的檔案首先讀取到記憶體中,然後在記憶體中進行執行,以加快系統的啟動速 度。
68. rhnsd:Red Hat 網路服務守護程序。通知官方的安全資訊以及為系統打補丁。
69. routed :該守護程式支援RIP協議的自動IP路由表維護。
70. rsync:remote sync遠端資料備份守護程序。
71. rsh :遠端主機上啟動一個shell,並執行使用者命令。
72. rwhod: 允許遠端使用者獲得執行rwho守護程式的機器上所有已登入使用者的列表。
73. rstatd:一個為LAN上的其它機器收集和提供系統資訊的守候程序。
74. ruserd:遠端使用者定位服務,這是一個基於RPC的服務,它提供關於當前記錄到LAN上一個機器日誌中的使用者資訊
75. rwalld:啟用rpc.rwall服務程序,這是一項基於RPC的服務,允許使用者給每個註冊到LAN機器上的其他終端寫訊息。
76. rwhod:啟用rwhod服務程序,它支援LAN的rwho和ruptime服務。
77. saslauthd: 使用SASL的認證守護程序。
78. sendmail:郵件伺服器sendmail守護程序。
79. smb:Samba檔案共享/列印服務守護程序。
80. snmpd:本地簡單網路管理守護程序。
81. squid:代理伺服器squid守護程序。
82. sshd:OpenSSH伺服器守護程序。Secure Shell Protocol可以實現安全地遠端管理主機。
83. smartd:Self Monitor Analysis and Reporting Technology System,監控你的硬碟是否出現故障。
84. syslog:一個讓系統引導時起動syslog和klogd系統日誌守候程序的指令碼。
85. time :該守護程序從遠端主機獲取時間和日期,採用TCP協議。
86. time-udp: 該守護程序從遠端主機獲取時間和日期,採用UDP協議。
87. tux:在Linux核心中執行apache伺服器的守護程序。
88. vsftpd:vsftpd伺服器的守護程序。
89. vncserver:VNC (Virtual Network Computing,虛擬網路計算)。
90. xfs:X Window字型伺服器守護程序,為本地和遠端X伺服器提供字型集。
91. xinetd:支援多種網路服務的核心守護程序。
92. ypbind:為NIS(網路資訊系統)客戶機啟用ypbind服務程序 。
93. yppasswdd:NIS口令伺服器守護程序。
94. ypserv:NIS主伺服器守護程序。
95. yum:RPM作業系統自動升級和軟體包管理守護程序。
可以根據自己的需要覺得是否啟動某系服務。如:u、iptables等是必須要執行的。echo、echo-udp、daytime、daytime- udp、chargen、chargen -udp做除錯用可以關閉。rsh、rstatd、rsync、rusersd、rwalld這些命令都是Berkley遠端命令,因為都以字母r開頭, 故稱r*命令。主要使用來使一臺計算機上的某個使用者以相同的帳戶遠端執行另一臺計算機的一個程式,不要可以關閉,減少隱患。innd是執行新聞組服務的進 程, 不要可以關閉。
----------------------------------------------------------
nohup是告訴系統忽略使用者退出系統
讓程序執行直到程序結束為止
比如我在遠端開啟ssh終端執行程式./server
如果不用nohup當我關閉ssh終端時
./server程序將會中止
使用nohup ./server &
可以在使用者退出終端時
程序能繼續執行