一、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運行的!當然如果同時安裝配置了兩種方式的服務,肯定是都能用的。