把linux可執(zhí)行程序做成一個(gè)服務(wù)

              在linux系統(tǒng)啟動(dòng)的時(shí)候,我們可以看到很多服務(wù)性程序一個(gè)接一個(gè)的被啟動(dòng)(就是那些后面有一個(gè)蘭色[OK]的行),這些在后臺(tái)運(yùn)行的程序?yàn)槲覀兪褂糜?jì)算機(jī)起了很重要的作用,以這種方式運(yùn)行的程序有以下特點(diǎn):
           開機(jī)啟動(dòng),關(guān)機(jī)停止(廢話!關(guān)機(jī)了還運(yùn)行啊???)
           后臺(tái)運(yùn)行
           通過service 命令控制或查看對(duì)應(yīng)的程序的運(yùn)行狀態(tài)

              恩,不錯(cuò),那怎么把我們自己編制的程序做成這樣的一個(gè)服務(wù)呢?

              廢話少說,主要分以下3步:

              1、把可執(zhí)行程序放到一個(gè)linux系統(tǒng)可以找到的地方。
           在linux命令提示符下輸入env ,回車后可看到環(huán)境變量,里面有一項(xiàng)PATH的,對(duì),這項(xiàng)里所指定的目錄都是系統(tǒng)可找到的地方,把我們的可執(zhí)行程序放入其中的一個(gè)目錄下即可,我們一般放在/usr/sbin/目錄下(放什么有放什么的地方,最好不要亂放)。

              2、在目錄 /etc/init.d/ 下,新建一個(gè)以服務(wù)名為文件名的文件。
           如果我們打開目錄 /etc/init.d/,看到的文件其實(shí)都是服務(wù)程序文件,每個(gè)文件的內(nèi)容都大同小異,我們會(huì)看到,這里的文件在文件結(jié)構(gòu)上幾乎是一樣的。幾乎每個(gè)文件都有 start、stop、restart和status這樣的標(biāo)志,對(duì),我們新建的這個(gè)文件也具有相同的結(jié)構(gòu),只是在這些標(biāo)志內(nèi)部把相應(yīng)的可執(zhí)行程序換成我們自己的可執(zhí)行程序即可,知道怎么做了嗎?那就是:復(fù)制——修改——保存。

              3、在目錄 /etc/rc3.d/ 下,新建一個(gè)指向在第2步中建立的服務(wù)文件的符號(hào)連接文件。
           打開目錄 /etc/rc3.d/ ,我們將看到這里都是符號(hào)連接文件(linux系統(tǒng)中的符號(hào)連接相當(dāng)于windows中的快捷方式)。采用以下命令格式:
           ln -sf 目標(biāo)文件名 連接文件名
              連接文件名稱采用“SXX目標(biāo)文件名”的格式,其中XX一般是一個(gè)從1到100的整數(shù),它表示啟動(dòng)優(yōu)先級(jí),數(shù)字越大,優(yōu)先級(jí)越低,比如:服務(wù)A的運(yùn)行要依賴服務(wù)B,那A的XX數(shù)字就應(yīng)該大于B的。后跟“目標(biāo)文件名”是為了一目了然,一看就知道是哪個(gè)文件的符號(hào)連接。
              目錄 /etc/rc3.d/ 是系統(tǒng)啟動(dòng)時(shí)自動(dòng)搜索的目錄,該目錄下的符號(hào)連接文件的目標(biāo)文件,都將被運(yùn)行,這就是在這個(gè)目錄建立符號(hào)連接的原因——為了開機(jī)就運(yùn)行。

              好了,完成以上3個(gè)步驟,你就把自己的一個(gè)可執(zhí)行程序做成系統(tǒng)的一個(gè)服務(wù)了,它具有我們一開始說的幾個(gè)特定。我們可以用service命令控制這個(gè)程序了:
           啟動(dòng):service hdz_service start
           停止:service hdz_service stop
           重啟:service hdz_service restart
              上面的 hdz_service 為服務(wù)名,也就是在第2步中建立的文件名。

              不過,好象感覺比較麻煩,能否把這幾個(gè)步驟自動(dòng)化一下?這樣在一臺(tái)新機(jī)子上部署就方便了,也更象回事 -_^!辦法當(dāng)然有了,還記得我們那個(gè)記錄代碼文件之間依賴關(guān)系的makefile文件嗎?呵呵,我們?cè)谶@里要用到它了。
              在makefile文件中添加一個(gè)標(biāo)志,并在該標(biāo)志下添加和下面類似的代碼:

          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

              在標(biāo)志install下的沒一句話,前面一定要留空白,這不僅是有利于閱讀,更是一個(gè)要求,makefile文件要求每一句可執(zhí)行語句前都要有空白(空格或tab)。
              上面代碼中的 hdz_pro 和 hdz_service 分別是可執(zhí)行文件名和服務(wù)名,這兩個(gè)名稱換成你自己的就行了,操作時(shí)用以下命令:
           make install
              運(yùn)行完就一切OK了,簡(jiǎn)單吧?

              大家在看我寫的東東時(shí),時(shí)不時(shí)會(huì)碰到“hdz”這樣的東西,這是我名字的縮寫,說明這正是要替換的。


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

          一般系統(tǒng)的運(yùn)行級(jí)別是在   /etc/inittab   里面指定的。有一行是類似  
            id:5:initdefault:  
            或者  
            id:3:initdefault:  
            的,這里的數(shù)字就是系統(tǒng)的默認(rèn)運(yùn)行級(jí)別。假設(shè)是   5。  
             
            啟動(dòng)服務(wù)的是依靠   /etc/init.d/   下的腳本啟動(dòng)的。這些都是普通的   shell   腳本,系統(tǒng)在調(diào)用的時(shí)候,如果是啟動(dòng)服務(wù),則傳入   start   作為參數(shù);stop   表示停止;restart   表示重啟。因此你可以寫一個(gè)腳本,比如簡(jiǎn)單的如這樣:  
             
            #!/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  
             
            把這個(gè)腳本放在   /etc/init.d   里面,譬如   /etc/init.d/your_prog  
            然后加入相應(yīng)運(yùn)行級(jí)別的鏈接:在   5   級(jí)啟動(dòng)則    
            ln   -s   /etc/init.d/your_prog   /etc/rc5.d/S100your_prog  
            ln   -s   /etc/init.d/your_prog   /etc/rc0.d/K100your_prog  
            這里兩個(gè)數(shù)字都可以用對(duì)應(yīng)目錄里最大的數(shù)字,因?yàn)闆]有別的服務(wù)依賴你的服務(wù)。  
            這樣表示,當(dāng)系統(tǒng)進(jìn)入   init   level   5   的時(shí)候啟動(dòng)你的程序,進(jìn)入   init   level   0   的時(shí)候停止你的程序。  

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

          系統(tǒng)服務(wù)介紹
              1. alsasound :Alsa聲卡驅(qū)動(dòng)守護(hù)程序。
              2. acpid:acpid(Advanced Configuration and Power Interface)是為替代傳統(tǒng)的APM電源管理標(biāo)準(zhǔn)而推出的新型電源管理標(biāo)準(zhǔn)。通常筆記本電腦需要啟動(dòng)電源進(jìn)行管理。
              3. atalk:AppleTalk網(wǎng)絡(luò)守護(hù)進(jìn)程。
              4. amd: 自動(dòng)安裝NFS守護(hù)進(jìn)程。
              5. anacron:一個(gè)自動(dòng)化運(yùn)行任務(wù)守護(hù)進(jìn)程。
              6. apmd:apmd(Advanced Power Management)是高級(jí)電源管理。
              7. arptables_jf :為arptables網(wǎng)絡(luò)的用戶控制過濾的守護(hù)進(jìn)程。
              8. arpwatch: 記錄日志并構(gòu)建一個(gè)在LAN接口上看到的以太網(wǎng)地址和IP地址對(duì)數(shù)據(jù)庫。
              9. autofs:自動(dòng)安裝管理進(jìn)程automount,與NFS相關(guān),依賴于NIS服務(wù)器
              10. bootparamd:引導(dǎo)參數(shù)服務(wù)器,為L(zhǎng)AN上的無盤工作站提供引導(dǎo)所需的相關(guān)信息。
              11. bluetooch:藍(lán)牙服務(wù)器守護(hù)進(jìn)程。
              12. crond :cron是Unix下的一個(gè)傳統(tǒng)程序,該程序周期地運(yùn)行用戶調(diào)度的任務(wù)。比起傳統(tǒng)的Unix版本,Linux版本添加了不少屬性,而且更安全,配置更簡(jiǎn)單。類似計(jì)劃任務(wù)。
              13. chargen:使用tcp協(xié)議的chargen server,chargen(Character Generator Protocol)是一種網(wǎng)絡(luò)服務(wù),主要功能是提供類似遠(yuǎn)程打字的功能。
              14. chargen-udp:使用UDP協(xié)議的chargen server。
              15. cpuspeed:監(jiān)測(cè)系統(tǒng)空閑百分比,降低或加快CPU時(shí)鐘速度和電壓從而在系統(tǒng)空閑時(shí)將能源消耗降為最小,而在系統(tǒng)繁忙時(shí)最大化加快系統(tǒng)執(zhí)行速度。
              16. dhcpd:動(dòng)態(tài)主機(jī)控制協(xié)議(Dynamic Host Control Protocol)的服務(wù)守護(hù)進(jìn)程。
              17. cups: cups(Common UNIX Printing System)是通用UNIX打印守護(hù)進(jìn)程。
              18. cups-config-daemons:cups打印系統(tǒng)切換守護(hù)進(jìn)程。
              19. cups-lpd:cups行打印守護(hù)進(jìn)程。
              20. daytime:使用TCP 協(xié)議的Daytime守護(hù)進(jìn)程,該協(xié)議為客戶機(jī)實(shí)現(xiàn)從遠(yuǎn)程服務(wù)器獲取日期和時(shí)間的功能。預(yù)設(shè)端口:13。
              21. daytime-udp:使用UDP 協(xié)議的Daytime守護(hù)進(jìn)程。
              22. dc_server:使用SSL安全套接字的代理服務(wù)器守護(hù)進(jìn)程。
              23. dc_client:使用SSL安全套接字的客戶端守護(hù)進(jìn)程。
              24. diskdump:服務(wù)器磁盤備份守護(hù)進(jìn)程。
              25. echo:服務(wù)器回顯客戶數(shù)據(jù)服務(wù)守護(hù)進(jìn)程。
              26. echo-udp:使用UDP協(xié)議的服務(wù)器回顯客戶數(shù)據(jù)服務(wù)守護(hù)進(jìn)程。
              27. eklogin:接受rlogin會(huì)話鑒證和用kerberos5加密的一種服務(wù)的守護(hù)進(jìn)程。
              28. gated :網(wǎng)關(guān)路由守護(hù)進(jìn)程。它支持各種路由協(xié)議,包括RIP版本1和2、DCN HELLO協(xié)議、 OSPF版本2以及EGP版本2到4。
              29. gpm:gpm(General Purpose Mouse Daemon )守護(hù)進(jìn)程為文本模式下的Linux程序如mc(Midnight Commander)提供了鼠標(biāo)的支持。
              30. gssftp: 使用kerberos 5認(rèn)證的ftp守護(hù)進(jìn)程
              31. httpd:Web服務(wù)器Apache守護(hù)進(jìn)程。
              32. inetd :因特網(wǎng)操作守護(hù)程序。
              33. innd:Usenet新聞服務(wù)器守護(hù)進(jìn)程。
              34. iiim:中文輸入法服務(wù)器守護(hù)進(jìn)程。
              35. iptables:iptables防火墻守護(hù)進(jìn)程。
              36. irda:紅外端口守護(hù)進(jìn)程。
              37. isdn:isdn啟動(dòng)和中止服務(wù)守護(hù)進(jìn)程。
              38. krb5-telnet:使用kerberos 5認(rèn)證的telnet守護(hù)進(jìn)程。
              39. klogin:遠(yuǎn)程登陸守護(hù)進(jìn)程。
              40. keytable:該進(jìn)程的功能是轉(zhuǎn)載在/etc/sysconfig/keyboards里定義的鍵盤映射表,該表可以通過kbdconfig工具進(jìn)行選擇。您應(yīng)該使該程序處于激活狀態(tài)。
              41. irqbalance:對(duì)多個(gè)系統(tǒng)處理器環(huán)境下的系統(tǒng)中斷請(qǐng)求進(jìn)行負(fù)載平衡的守護(hù)程序。如果你只安裝了一個(gè)CPU,就不需要加載這個(gè)守護(hù)程序。
              42. kshell :kshell守護(hù)進(jìn)程。
              43. kudzu:硬件自動(dòng)檢測(cè)程序。
              44. ldap:ldap(Lightweight Directory Access Protocol)目錄訪問協(xié)議服務(wù)器守護(hù)進(jìn)程。
              45. lm_seroems:檢測(cè)主板工作情況守護(hù)進(jìn)程。
              46. lpd :lpd是老式打印守護(hù)程序,負(fù)責(zé)將lpr等程序提交給打印 作業(yè)。
              47. mdmonitor:RAID相關(guān)設(shè)備的守護(hù)程序。
              48. messagebus:D-BUS是一個(gè)庫,為兩個(gè)或兩個(gè)以上的應(yīng)用程序提供一對(duì)一的通訊。
              49. microcode_ctl:可編碼以及發(fā)送新的微代碼到內(nèi)核以更新Intel IA32系列處理器。
              50. mysqld: 一個(gè)快速高效可靠的輕型SQL數(shù)據(jù)庫引擎守護(hù)進(jìn)程。
              51. named:DNS(BIND)服務(wù)器守護(hù)進(jìn)程。
              52. netplugd:netplugd(network cable hotplug management daemon)守護(hù)程序,用于監(jiān)控一個(gè)或多個(gè)網(wǎng)絡(luò)接口的狀態(tài),當(dāng)某些事件觸發(fā)時(shí)運(yùn)行一個(gè)外部腳本程序。
              53. netdump:遠(yuǎn)程網(wǎng)絡(luò)備份服務(wù)器守護(hù)進(jìn)程。
              54. netfs:Network Filesystem Mounter,該進(jìn)程安裝和卸載NFS、SAMBA和NCP網(wǎng)絡(luò)文件系統(tǒng)。
              55. nfs:網(wǎng)絡(luò)文件系統(tǒng)守護(hù)進(jìn)程。
              56. nfslock:NFS是一個(gè)流行的通過TCP/IP網(wǎng)絡(luò)共享文件的協(xié)議,此守護(hù)進(jìn)程提供了NFS文件鎖定功能。
              57. ntpd:Network time Protocol daemon(網(wǎng)絡(luò)時(shí)間校正協(xié)議)。ntpd是用來使系統(tǒng)和一個(gè)精確的時(shí)間源保持時(shí)間同步的協(xié)議守護(hù)進(jìn)程。
              58. network:激活/關(guān)閉啟動(dòng)時(shí)的各個(gè)網(wǎng)絡(luò)接口守護(hù)進(jìn)程。
              59. psacct:該守護(hù)進(jìn)程包括幾個(gè)工具用來監(jiān)控進(jìn)程活動(dòng)的工具,包括ac,lastcomm, accton 和sa。
              60. pcmcia:主要用于支持筆記本電腦接口守護(hù)進(jìn)程。
              61. portmap:該守護(hù)進(jìn)程用來支持RPC連接,RPC被用于NFS以及NIS 等服務(wù)。
              62. postgresql: PostgreSQL 關(guān)系數(shù)據(jù)庫引擎。
              63. proftpd: proftpd 是Unix下的一個(gè)配置靈活的ftp服務(wù)器的守護(hù)程序。
              64. pppoe:ADSL連接守護(hù)進(jìn)程。
              65. random :保存和恢復(fù)系統(tǒng)的高質(zhì)量隨機(jī)數(shù)生成器,這些隨機(jī)數(shù)是系 統(tǒng)一些隨機(jī)行為提供的。
              66. rawdevices:在使用集群文件系統(tǒng)時(shí)用于加載raw設(shè)備的守護(hù)進(jìn)程。
              67. readahead、readahead_early:readahead和readahead_early是在Fedora core 2中最新推出的兩個(gè)后臺(tái)運(yùn)行的守護(hù)程序。其作用是在啟動(dòng)系統(tǒng)期間,將啟動(dòng)系統(tǒng)所要用到的文件首先讀取到內(nèi)存中,然后在內(nèi)存中進(jìn)行執(zhí)行,以加快系統(tǒng)的啟動(dòng)速度。
              68. rhnsd:Red Hat 網(wǎng)絡(luò)服務(wù)守護(hù)進(jìn)程。通知官方的安全信息以及為系統(tǒng)打補(bǔ)丁。
              69. routed :該守護(hù)程序支持RIP協(xié)議的自動(dòng)IP路由表維護(hù)。
              70. rsync:remote sync遠(yuǎn)程數(shù)據(jù)備份守護(hù)進(jìn)程。
              71. rsh :遠(yuǎn)程主機(jī)上啟動(dòng)一個(gè)shell,并執(zhí)行用戶命令。
              72. rwhod: 允許遠(yuǎn)程用戶獲得運(yùn)行rwho守護(hù)程序的機(jī)器上所有已登錄用戶的列表。
              73. rstatd:一個(gè)為L(zhǎng)AN上的其它機(jī)器收集和提供系統(tǒng)信息的守候進(jìn)程。
              74. ruserd:遠(yuǎn)程用戶定位服務(wù),這是一個(gè)基于RPC的服務(wù),它提供關(guān)于當(dāng)前記錄到LAN上一個(gè)機(jī)器日志中的用戶信息
              75. rwalld:激活rpc.rwall服務(wù)進(jìn)程,這是一項(xiàng)基于RPC的服務(wù),允許用戶給每個(gè)注冊(cè)到LAN機(jī)器上的其他終端寫消息。
              76. rwhod:激活rwhod服務(wù)進(jìn)程,它支持LAN的rwho和ruptime服務(wù)。
              77. saslauthd: 使用SASL的認(rèn)證守護(hù)進(jìn)程。
              78. sendmail:郵件服務(wù)器sendmail守護(hù)進(jìn)程。
              79. smb:Samba文件共享/打印服務(wù)守護(hù)進(jìn)程。
              80. snmpd:本地簡(jiǎn)單網(wǎng)絡(luò)管理守護(hù)進(jìn)程。
              81. squid:代理服務(wù)器squid守護(hù)進(jìn)程。
              82. sshd:OpenSSH服務(wù)器守護(hù)進(jìn)程。Secure Shell Protocol可以實(shí)現(xiàn)安全地遠(yuǎn)程管理主機(jī)。
              83. smartd:Self Monitor Analysis and Reporting Technology System,監(jiān)控你的硬盤是否出現(xiàn)故障。
              84. syslog:一個(gè)讓系統(tǒng)引導(dǎo)時(shí)起動(dòng)syslog和klogd系統(tǒng)日志守候進(jìn)程的腳本。
              85. time :該守護(hù)進(jìn)程從遠(yuǎn)程主機(jī)獲取時(shí)間和日期,采用TCP協(xié)議。
              86. time-udp: 該守護(hù)進(jìn)程從遠(yuǎn)程主機(jī)獲取時(shí)間和日期,采用UDP協(xié)議。
              87. tux:在Linux內(nèi)核中運(yùn)行apache服務(wù)器的守護(hù)進(jìn)程。
              88. vsftpd:vsftpd服務(wù)器的守護(hù)進(jìn)程。
              89. vncserver: VNC (Virtual Network Computing,虛擬網(wǎng)絡(luò)計(jì)算)。
              90. xfs:X Window字型服務(wù)器守護(hù)進(jìn)程,為本地和遠(yuǎn)程X服務(wù)器提供字型集。
              91. xinetd:支持多種網(wǎng)絡(luò)服務(wù)的核心守護(hù)進(jìn)程。
              92. ypbind:為NIS(網(wǎng)絡(luò)信息系統(tǒng))客戶機(jī)激活ypbind服務(wù)進(jìn)程 。
              93. yppasswdd:NIS口令服務(wù)器守護(hù)進(jìn)程。
              94. ypserv:NIS主服務(wù)器守護(hù)進(jìn)程。
              95. yum:RPM操作系統(tǒng)自動(dòng)升級(jí)和軟件包管理守護(hù)進(jìn)程。
              可以根據(jù)自己的需要覺得是否啟動(dòng)某系服務(wù)。如:u、iptables等是必須要運(yùn)行的。echo、echo-udp、daytime、daytime- udp、chargen、chargen -udp做調(diào)試用可以關(guān)閉。rsh、rstatd、rsync、rusersd、rwalld這些命令都是Berkley遠(yuǎn)程命令,因?yàn)槎家宰帜竢開頭,故稱 r*命令。主要使用來使一臺(tái)計(jì)算機(jī)上的某個(gè)用戶以相同的帳戶遠(yuǎn)程執(zhí)行另一臺(tái)計(jì)算機(jī)的一個(gè)程序,不要可以關(guān)閉,減少隱患。innd是運(yùn)行新聞組服務(wù)的進(jìn)程,不要可以關(guān)閉。

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

          nohup是告訴系統(tǒng)忽略用戶退出系統(tǒng)  
            讓進(jìn)程運(yùn)行直到進(jìn)程結(jié)束為止  
            比如我在遠(yuǎn)程打開ssh終端運(yùn)行程序./server  
            如果不用nohup當(dāng)我關(guān)閉ssh終端時(shí)  
            ./server進(jìn)程將會(huì)中止  
            使用nohup   ./server   &  
            可以在用戶退出終端時(shí)  
            進(jìn)程能繼續(xù)執(zhí)行  


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          posts - 40, comments - 9, trackbacks - 0, articles - 9

          Copyright © 希

          主站蜘蛛池模板: 长阳| 安塞县| 中西区| 海晏县| 泾阳县| 洱源县| 肇源县| 胶南市| 洪江市| 科技| 贵南县| 温泉县| 区。| 噶尔县| 铜梁县| 资溪县| 鸡西市| 静安区| 南皮县| 神木县| 怀集县| 扶余县| 图木舒克市| 河北省| 西昌市| 宁乡县| 本溪| 濉溪县| 师宗县| 泰兴市| 黑水县| 永年县| 大田县| 阳江市| 满城县| 浑源县| 尚志市| 漯河市| 喜德县| 盈江县| 祁连县|