天天看點

Linux添加自定義系統服務,開機自啟

一、chkconfig方式

  一般比較老的centos支援chkconfig,其添加步驟比較簡單:

1、在/etc/init.d/目錄下建立一個自定義服務的檔案如:myservice.sh

2、添加下面兩句到 #!/bin/bash 之後。

1 # chkconfig: 2345 10 90 
2 # description: myservice      

PS:不添加這兩行會報錯:執行chkconfig --add myservice後提示:service myservice does not support chkconfig

PS:其中2345是預設啟動級别,級别有0-6共7個級别

  等級0表示:表示關機 

  等級1表示:單使用者模式 

  等級2表示:無網絡連接配接的多使用者指令行模式

  等級3表示:有網絡連接配接的多使用者指令行模式  

  等級4表示:不可用 

  等級5表示:帶圖形界面的多使用者模式   

  等級6表示:重新啟動

  10是啟動優先級,90是停止優先級,優先級範圍是0-100,數字越大,優先級越低。

3、指令

開啟開機自啟動服務:chkconfig myservice on

添加開機自啟動服務:chkconfig --add myservice 

檢視開機自啟動服務:chkconfig --list myservice 

二、systemctl方式(推薦)

  由于chkconfig是Redhat發行版特有的服務配置方式,在基于debian的發行版下原生不支援,是以使用systemctl方式添加自定義系統服務,更具優勢。

  systemctl腳本存放在:/usr/lib/systemd/,有系統(system)和使用者(user)之分,需要開機不登陸就能運作的程式,存在系統服務裡,即:/usr/lib/systemd/system目錄下。

  systemctl管理的每一個服務以.service結尾,一般會分為3部分:[Unit]、[Service]和[Install]。

[Unit]

  主要是對這個服務的說明,内容包括Description和After,Description 用于描述服務,After用于描述服務類别

[Service]

  Type=simple(預設值):systemd認為該服務将立即啟動。服務程序不會fork。如果該服務要啟動其他服務,不要使用此類型啟動,除非該服務是socket激活型。

  Type=forking:systemd認為當該服務程序fork,且父程序退出後服務啟動成功。對于正常的守護程序(daemon),除非你确定此啟動方式無法滿足需求,使用此類型啟動即可。使用此啟動類型應同時指定 PIDFile=,以便systemd能夠跟蹤服務的主程序。

  Type=oneshot:這一選項适用于隻執行一項任務、随後立即退出的服務。可能需要同時設定 RemainAfterExit=yes 使得 systemd 在服務程序退出之後仍然認為服務處于激活狀态。

  Type=notify:與 Type=simple 相同,但約定服務會在就緒後向 systemd 發送一個信号。這一通知的實作由 libsystemd-daemon.so 提供。

  Type=dbus:若以此方式啟動,當指定的 BusName 出現在DBus系統總線上時,systemd認為服務就緒。

  Type=idle: systemd會等待所有任務(Jobs)處理完成後,才開始執行idle類型的單元。除此之外,其他行為和Type=simple 類似。

  PIDFile:pid檔案路徑

  ExecStart:指定啟動單元的指令或者腳本,ExecStartPre和ExecStartPost節指定在ExecStart之前或者之後使用者自定義執行的腳本。Type=oneshot允許指定多個希望順序執行的使用者自定義指令。

  ExecReload:指定單元停止時執行的指令或者腳本。

  ExecStop:指定單元停止時執行的指令或者腳本。

  PrivateTmp:True表示給服務配置設定獨立的臨時空間

  Restart:這個選項如果被允許,服務重新開機的時候程序會退出,會通過systemctl指令執行清除并重新開機的操作。

  RemainAfterExit:如果設定這個選擇為真,服務會被認為是在激活狀态,即使是以的程序已經退出,預設的值為假,這個選項隻有在Type=oneshot時需要被配置。

  注意:[Service]部分的啟動、重新開機、停止指令全部要求使用絕對路徑,使用相對路徑則會報錯!

[Install]

  服務安裝的相關設定,可設定為多使用者的

範例:

1 [Unit]
 2 Description=myservice
 3 After=myservice.service
 4 
 5 [Service]
 6 Type=oneshot
 7 RemainAfterExit=yes
 8 ExecStart=/opt/myservice/start.sh
 9 ExecReload=
10 ExecStop=/opt/myservice/stop.sh
11 
12 [Install]
13 WantedBy=multi-user.target      

腳本授權:chmod 755 /usr/lib/systemd/system/myservice.service

開機啟動:systemctl enable myservice.service

至此,每次開機都會執行/opt/myservice/start.sh,每次關機都會執行/opt/myservice/stop.sh。

三、chkconfig與systemctl指令對照表

Linux添加自定義系統服務,開機自啟

PS:此表僅為指令對照,在chkconfig下配置的服務,是不能使用systemctl運作的!當然如果同時安裝配置了兩種方式的服務,肯定是都能用的。