把linux可執行程序作成一個服務[轉]

轉自:http://www.2cto.com/os/201202/121249.html

在linux系統啓動的時候,咱們能夠看到不少服務性程序一個接一個的被啓動(就是那些後面有一個蘭色[OK]的行),這些在後臺運行的程序爲咱們使用計算機起了很重要的做用,以這種方式運行的程序有如下特色:
開機啓動,關機中止(廢話!關機了還運行啊???)
後臺運行
經過service 命令控制或查看對應的程序的運行狀態
    恩,不錯,那怎麼把咱們本身編制的程序作成這樣的一個服務呢?
 
    廢話少說,主要分如下3步:
 
    一、把可執行程序放到一個linux系統能夠找到的地方。
在linux命令提示符下輸入env ,回車後可看到環境變量,裏面有一項PATH的,對,這項裏所指定的目錄都是系統可找到的地方,把咱們的可執行程序放入其中的一個目錄下便可,咱們通常放在/usr/sbin/目錄下(放什麼有放什麼的地方,最好不要亂放)。
 
    二、在目錄/etc/init.d/ 下,新建一個以服務名爲文件名的文件。
若是咱們打開目錄/etc/init.d/,看到的文件其實都是服務程序文件,每一個文件的內容都大同小異,咱們會看到,這裏的文件在文件結構上幾乎是同樣 的。幾乎每一個文件 都有start、stop、restart和status這樣的標誌,對,咱們新建的這個文件也具備相同的結構,只是在這些標誌內部把相應的可執行程序換 成我 們本身的可執行程序便可,知道怎麼作了嗎?那就是:複製——修改——保存。
 
    三、在目錄/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和二、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   &  
能夠在用戶退出終端時  
進程能繼續執行html

相關文章
相關標籤/搜索