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

2021-09-08 20:42:10 字數 3733 閱讀 9379

建立乙個最簡單的linux隨機啟動服務 « xiaoxia[pg]

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

#!/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使用者身份被自動執行。

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

網上有不少關於如何讓linux自動執行自己編寫的指令碼或者程式的方法,但是大多數都是把命令寫到 etc rc.d rc.local或者 etc rc.local裡,這樣雖然能夠實現隨機執行,但是並不夠靈活。不能像mysql,apache等服務一樣能夠使用service命令或者呼叫init.d下的指令...

建立乙個最簡單的VST

vst外掛程式在國內 人中還是被廣泛使用的,從0開始開發vst外掛程式,我個人想著還是從vst開始比較好。因為win32的基礎不是很好,動態鏈結庫的程式設計也不清楚,所以吃了很多苦頭。廢話戛然而止。第一步使用vs2013 新建工程,win32工程,dll,空專案,匯出符號。這裡我一開始新建的是mfc...

乙個最簡單的Linux核心模組

include include static int init hello init void static void exit hello exit module init hello init module exit hello exit module license gpl 這個最簡單的核心模...