Ubuntu乙個最簡單的Linux隨機啟動服務

2021-06-18 11:54:34 字數 3752 閱讀 2360

網上有不少關於如何讓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

/etc/init.d/apache2 stop

因為不同的linux發行版本,對後台服務的處理方式不大一樣,所以下面以ubuntu系統為例,看看如何寫乙個簡單的隨機啟動服務。

準備好乙個需要隨機啟動的程式,例如/root/proxy.py,設定可執行屬性,確保可以通過輸入絕對路徑直接執行。

root@localhost:~# chmod +x proxy.py

root@localhost:~# /root/proxy.py

loaded 0 hosts.

proxy over h2.edu.bj.ie.sogou.com.

please set your browser's proxy to ('::', 1998).

編寫乙個啟動控制指令碼,以proxy為例,建立/etc/init.d/proxy文字檔案,輸入下面的內容:

#!/bin/sh

case "$1" in

start)

start-stop-daemon --start --background --exec /root/proxy.py

;;stop)

start-stop-daemon --stop --name proxy.py

esac

這是乙個簡單的shell指令碼,case .. in是用來根據呼叫引數進行不同的操作,start-stop-daemon是乙個可以管理daemon程序的程式,要檢視它的詳細說明,可以執行man start-stop-daemon。start的時候,使用--exec指定要執行的檔案,stop的時候,使用--name根據程序名字來使用killall結束匹配的程序。

接著,設定指令碼檔案屬性,設定可執行標記。

root@localhost:~# chmod 755 /etc/init.d/proxy

這樣子,就可以使用service命令來啟動和關閉程序了,例如啟動程序如下:

root@localhost:~# service proxy start

root@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

關閉程序,

root@localhost:~# service proxy stop

root@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服務的程序控制指令碼已經寫好了,但是要實現隨機啟動,還需要乙個步驟。

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。

root@localhost:~# update-rc.d proxy defaults 99

update-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後面有三個引數,分別是/etc/init.d下的指令碼名字,預設安裝方式,執行的優先順序。優先順序的數字越大,表示越遲執行,這裡我們把自己寫的服務放在最後執行。

如果要解除安裝隨機啟動的服務,執行

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...