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命令對照表

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM