網上有不少關於如何讓linux自動執行自己編寫的指令碼或者程式的方法,但是大多數都是把命令寫到/etc/rc.d/rc.local或者/etc/rc.local裡,這樣雖然能夠實現隨機執行,但是並不夠靈活。不能像mysql,apache等服務一樣能夠使用service命令或者呼叫init.d下的指令碼啟動、關閉或者重啟程序。例如,
service mysql restart或者service apache2 stop
/etc/init.d/mysql restart因為不同的linux發行版本,對後台服務的處理方式不大一樣,所以下面以ubuntu系統為例,看看如何寫乙個簡單的隨機啟動服務。/etc/init.d/apache2 stop
準備好乙個需要隨機啟動的程式,例如/root/proxy.py,設定可執行屬性,確保可以通過輸入絕對路徑直接執行。
root@localhost:~# chmod +x proxy.py編寫乙個啟動控制指令碼,以proxy為例,建立/etc/init.d/proxy文字檔案,輸入下面的內容:root@localhost:~# /root/proxy.py
loaded 0 hosts.
proxy over h2.edu.bj.ie.sogou.com.
please set your browser's proxy to ('::', 1998).
這是乙個簡單的shell指令碼,case .. in是用來根據呼叫引數進行不同的操作,start-stop-daemon是乙個可以管理daemon程序的程式,要檢視它的詳細說明,可以執行man start-stop-daemon。start的時候,使用--exec指定要執行的檔案,stop的時候,使用--name根據程序名字來使用killall結束匹配的程序。#!/bin/shcase "$1" in
start)
start-stop-daemon --start --background --exec /root/proxy.py
;;stop)
start-stop-daemon --stop --name proxy.py
esac
接著,設定指令碼檔案屬性,設定可執行標記。
root@localhost:~# chmod 755 /etc/init.d/proxy這樣子,就可以使用service命令來啟動和關閉程序了,例如啟動程序如下:
關閉程序,root@localhost:~# service proxy startroot@localhost:~# ps aux|grep proxy
root 353 1.4 1.9 8644 5212 ? s 09:50 0:00 /usr/bin/python /root/proxy.py
root 355 0.0 0.2 1900 596 pts/0 s+ 09:50 0:00 grep --color=auto proxy
到這裡,乙個linux服務的程序控制指令碼已經寫好了,但是要實現隨機啟動,還需要乙個步驟。root@localhost:~# service proxy stoproot@localhost:~# ps aux |grep proxy
root 365 0.0 0.2 1900 592 pts/0 s+ 09:51 0:00 grep --color=auto proxy
linux開機的時候,不是直接執行/etc/init.d下的所有指令碼的,而是根據不同的runlevel來執行/etc/rc$runlevel.d下的指令碼。這裡的runlevel是用以區別系統的執行方式(例如單使用者的runlevel,多**桌面的runlevel,伺服器的runlevel都不同)。
在ubuntu裡,可以使用update-rc.d來把/etc/init.d/proxy安裝到各個runlevel中。更多關於update-rc.d的說明,請參見man update-rc.d。
update-rc.d後面有三個引數,分別是/etc/init.d下的指令碼名字,預設安裝方式,執行的優先順序。優先順序的數字越大,表示越遲執行,這裡我們把自己寫的服務放在最後執行。root@localhost:~# update-rc.d proxy defaults 99update-rc.d: warning: /etc/init.d/proxy missing lsb information
update-rc.d: see adding system startup for /etc/init.d/proxy ...
/etc/rc0.d/k99proxy -> ../init.d/proxy
/etc/rc1.d/k99proxy -> ../init.d/proxy
/etc/rc6.d/k99proxy -> ../init.d/proxy
/etc/rc2.d/s99proxy -> ../init.d/proxy
/etc/rc3.d/s99proxy -> ../init.d/proxy
/etc/rc4.d/s99proxy -> ../init.d/proxy
/etc/rc5.d/s99proxy -> ../init.d/proxy
如果要解除安裝隨機啟動的服務,執行
update-rc.d -f proxy remove在update-rc.d安裝的時候提示了警告資訊,是因為我們寫的/etc/init.d/proxy太簡陋了,連lsb的資訊也沒有提供。
update-rc.d: warning: /etc/init.d/proxy missing lsb information只需要做一些小改動,就可以避免那個警告了。如下:update-rc.d: see
esac到此,乙個最簡單的隨機啟動服務寫好了,看起來文章挺長的,但其實也就幾個命令而已。
在下次開機啟動的時候,proxy.py就會以root使用者身份被自動執行。
ajax最簡單的乙個例項
最近在學習ajax的一些東西,下面是學習時寫的乙個最簡單的例子。href.html是頁面靜態檔案。ajax.js是js指令碼。for.php是要呼叫的php指令碼。如下 href.html檔案 如下 hopelightsbt ajax.js 如下 判斷瀏覽器是否支援xmlhttprequest物件 ...
乙個最簡單的AJAX例子
該例子實現的功能 通過點選button從伺服器端獲取資料然後提示輸出.default.aspx aaa.aspx.cs using system using system.data using system.configuration using system.collections using s...
乙個最簡單的裝飾模式
如果要對乙個list中的元素排序,如果list中的元素是可排序的 實現了 apable 直接collections.sort list 如果要指定排序演算法,可以使用 parator,可以參考 collections.sort是按公升序排序的,如果要按降序呢?其實很簡單,只要自己重新定義乙個 par...