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


轉自: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   &  
可以在用戶退出終端時  
進程能繼續執行


免責聲明!

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



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