大多數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
複製**
#!/bin/sh
case "$1" in
start)
start-stop-daemon --start --background --exec /home/fx/hxht.py
;;stop)
start-stop-daemon --stop --name hxht.py
;;restart)
start-stop-daemon --stop hxht.py
start-stop-daemon --start --background --exec /home/fx/hxht.py
;;*)
echo "please use args: start stop restart!"
;;esac
複製**
這是乙個簡單的shell指令碼,case .. in是用來根據呼叫引數進行不同的操作,start-stop-daemon是乙個可以管理daemon程序的程式,要檢視它的詳細說明,可以執行man start-stop-daemon。start的時候,使用--exec指定要執行的檔案,stop的時候,使用--name根據程序名字來使用 killall結束匹配的程序。
接著,設定指令碼檔案屬性,設定可執行標記。
root@localhost:~# chmod 755 /etc/init.d/hxht
這樣子,就可以使用service命令來啟動和關閉程序了,例如啟動程序如下:
root@localhost:~# service hxht start
root@localhost:~# ps aux|grep hxht
root 353 1.4 1.9 8644 5212 ? s 09:50 0:00 /usr/bin/python /root/hxht.py
root 355 0.0 0.2 1900 596 pts/0 s+ 09:50 0:00 grep --color=auto hxht
關閉程序,
root@localhost:~# service hxht stop
root@localhost:~# ps aux |grep hxht
root 365 0.0 0.2 1900 592 pts/0 s+ 09:51 0:00 grep --color=auto hxht
到這裡,乙個linux服務的程序控制指令碼已經寫好了,但是要實現隨機啟動,還需要乙個步驟。
linux開機的時候,不是直接執行/etc/init.d下的所有指令碼的,而是根據不同的runlevel來執行/etc/rc$runlevel.d 下的指令碼。這裡的runlevel是用以區別系統的執行方式(例如單使用者的runlevel,多**桌面的runlevel,伺服器的runlevel都 不同)。
在ubuntu裡,可以使用update-rc.d來把/etc/init.d/hxht安裝到各個runlevel中。更多關於update-rc.d的說明,請參見man update-rc.d。
root@localhost:~# update-rc.d hxht defaults 99
update-rc.d: warning: /etc/init.d/hxht missing lsb information
update-rc.d: see
adding system startup for /etc/init.d/hxht ...
/etc/rc0.d/k99hxht -> ../init.d/hxht
/etc/rc1.d/k99hxht -> ../init.d/hxht
/etc/rc6.d/k99hxht -> ../init.d/hxht
/etc/rc2.d/s99hxht -> ../init.d/hxht
/etc/rc3.d/s99hxht -> ../init.d/hxht
/etc/rc4.d/s99hxht -> ../init.d/hxht
/etc/rc5.d/s99hxht -> ../init.d/hxht
update-rc.d後面有三個引數,分別是/etc/init.d下的指令碼名字,預設安裝方式,執行的優先順序。優先順序的數字越大,表示越遲執行,這裡我們把自己寫的服務放在最後執行。
如果要解除安裝隨機啟動的服務,執行
update-rc.d -f hxht remove
在update-rc.d安裝的時候提示了警告資訊,是因為我們寫的/etc/init.d/hxht太簡陋了,連lsb的資訊也沒有提供。
update-rc.d: warning: /etc/init.d/hxht missing lsb information
update-rc.d: see
只需要做一些小改動,就可以避免那個警告了。如下:
#!/bin/sh
### begin init info
# provides: hxht
# required-start: $remote_fs
# required-stop: $remote_fs
# default-start: 2 3 4 5
# default-stop: 0 1 6
# short-description: start or stop the hxht service
### end init info
case "$1" in
start)
start-stop-daemon --start --background --exec /home/fx/hxht.py
;;stop)
start-stop-daemon --stop --name hxht.py
;;restart)
start-stop-daemon --stop hxht.py
start-stop-daemon --start --background --exec /home/fx/hxht.py
;;*)
echo "please use args: start stop restart!"
;;esac
到此,乙個最簡單的隨機啟動服務寫好了,看起來文章挺長的,但其實也就幾個命令而已。
在下次開機啟動的時候,hxht.py就會以root使用者身份被自動執行。
現在,你應該知道怎麼編寫屬於自己的service命令了吧,編寫乙個指令碼,然後把它放在/etc/init.d這個目錄底下,你就可以用service +指令碼名字 執行它。如果是要開機自動啟動那就得用chkconfig命令了。
注意:a、service這個命令往往是即時生效,不用開關機,但是重啟後服務會回到預設狀態。
b、chkconfig是用於把服務加到開機自動啟動列表裡,只要啟動它,就能自動啟動,重啟後永久生效
即:chkconfig --add command
chkconfig command on/off 重啟後永久生效
linux用service命令管理自定義服務指令碼
今天需要在伺服器上啟動多個mysql例項 新加的mysql例項不能用mysqld multi 管理,所以就自定了個mysql 3307服務,用service管理 可以看看service的 都是些簡單的shell指令碼 service的原理就是去 etc init.d下找對應的服務指令碼,然後呼叫指令...
angular6自定義服務service
angular6.x server ng g service storageserviceservice 是乙個單例,如果放在根路由下,就是在所有的元件都是共享的,因此可以利用service來傳遞和共享資料。import from angular core injectable export cla...
Linux 自定義命令
在linux使用過程中,我經常會遇到要使用位於較深目錄下的文字或應用,這樣我就需要穿過多層目錄才能找到需要的東西,而且經常會記不清楚長長的路徑,因此我想減少這種時間浪費。於是就用文字編輯器嘗試編寫自己的指令碼,能夠快速開啟我需要的應用。以我經常需要用到的xampp為例,要操作xampp要麼是在很深的...