Linux 自定義service啟動

2021-09-02 08:42:52 字數 3642 閱讀 8418

大多數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要麼是在很深的...