把linux可執行程式做成一個服務

來源:互聯網
上載者:User
在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安全通訊端的Proxy 伺服器守護進程。
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:中文IME伺服器守護進程。
35. iptables:iptables防火牆守護進程。
36. irda:紅外線連接埠守護進程。
37. isdn:isdn啟動和中止服務守護進程。
38. krb5-telnet:使用kerberos 5認證的telnet守護進程。
39. klogin:遠程登陸守護進程。
40. keytable:該進程的功能是轉載在/etc/sysconfig/keyboards裡定義的鍵盤對應表,該表可以通過kbdconfig工具進行選擇。您應該使該程式處於啟用狀態。
41. irqbalance:對多個系統處理器環境下的系統插斷要求進行Server Load Balancer的精靈。如果你只安裝了一個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:Proxy 伺服器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   &  
可以在使用者退出終端時  
進程能繼續執行  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.