天天看點

Centos7 可執行程式自定義為系統服務

systemctl的使用相比以往系統服務的/etc/init.d的啟動腳本的方式變動也比較大,但變的更簡單更易用了,同firewalld一樣,運作原理一目了然,對于初學者來說,隻要做過一兩次練習,就能适應各種生産環境。

1、systemctl

用法:systemctl [OPT] COMMAND [NAME]…

啟動服務:systemctl start NAME.service

停止服務:systemctl stop NAME.service

重新開機服務:systemctl restart NAME.service

服務狀态:systemctl status NAME.service

條件式重新開機,已啟動才重新開機,否則不作操作:systemctl try-restart NAME.service

重載或重新開機服務,先加載再啟動:systemctl reload-or-restart NAME.service

重載或條件式重新開機:systemctl reload-or-try-restart NAME.service

禁止自動和手動啟動:systemctl mask NAME.service

取消禁止:systemctl unmask NAME.service

檢視某服務目前激活與否的狀态:systemctl is-active NAME.service

檢視所有已經激活的服務:systemctl list-units -t service

檢視所有服務:systemctl list-units -t service -a

設定某服務開機自啟動:systemctl enable NAME.service

設定某服務開機禁止啟動:systemctl disable NAME.service

檢視所有服務的開機自啟動狀态:systemctl list-unit-files –t service

列出該服務在哪些運作級别下啟用和禁止:ls /etc/systemd/system/*.wants/sshd.service

檢視服務是否開機啟動:systemctl is-enabled NAME.service

檢視服務的依賴關系:systemctl list-dependencies NAME.service

殺掉程序:systemctl kill (程序名)

2、服務狀态:

loaded:unit配置檔案已處理

active(running):一次或多次持續處理的運作

active(exited):成功完成一次性配置

active(waiting):運作中,等待一個事件

inactive:不運作

enable:開機啟動

disable:開機不啟動

static:開機不啟動,但可以被另一個啟用的服務激活。

3、運作級别:

0 :關機:poweroff.target

1 :單使用者模式:rescue.target

2 :預設不啟用NFS的多使用者:multi-user.target

3 :完全的多使用者:multi-user.target

4 :保留:mult-user.target

5 :圖形:graphical.target

6 :重新開機:reboot.target

CentOS 7的服務systemctl腳本存放在:/usr/lib/systemd/,有系統(system)和使用者(user)之分,因為我們配置的絕大多數腳本都不需要登陸系統才能運作,是以基本都是放在/usr/lib/systemd/system下。

  每一個服務以.service結尾,我們打開/usr/lib/systemd/system會發現很多以.service結尾的程式檔案,其實隻要複制一個然後編輯,就很容易寫一個服務。以現在我們經常會用來科學上網的shadowsocks來說,我們安裝完 shadowsocks後,需要用ssserver -c /etc/shadowsocks.json -d start 這樣的指令來啟動服務,如果需要開機啟動,除了加入rc.local,我們将它轉化為系統服務無疑是更友善操作。

  我們建立一個shadowsocks.service然後編輯:

以 tomcat 為例,在CentOS上配置為系統服務,随作業系統啟動而啟動,在 /etc/systemd/system 目錄下建立 tomcatd.service 檔案,并編輯内容如下:

配置參數說明如下:

a)  Unit檔案格式:

/etc/systemd/system:系統管理者和使用者使用;

/usr/lib/systemd/system:發行版打包者使用;

預設機關是秒;通常由三部分組成:

[Unit]:定義與unit類型無關的通用選項;用于提供unit的描述資訊,unit行為及依賴關系;

常用的選項:

Description:描述資訊

After:定義unit的啟動次序,表示目前unit應該晚于哪些unit啟動,其功能與Before相反;

Requires:依賴到的其它units,強依賴,被依賴的units無法激活時,目前unit即無法激活;

Wants:依賴到的其它units,弱依賴;

Conflicts:定義units間的沖突關系。

b) [Service]:與特定類型相關的專用選項;此處為service類型;

常用選項:

Type:定義影響ExecStart及相關參數功能的unit程序啟動類型;

simple:預設值,這個daemon主要由ExecStart接的指令串來啟動,啟動後常駐于記憶體中;

forking:由ExacStart啟動的程式透過spawns延伸出其它子程式來作為此deamon的主要服務。原生父程式在啟動結束後就會終止。

oneshot:與simple類似,不過這個程式在完成工作後就結束,不常駐記憶體;

dbus:與simple類似,但這個daemon必須要在取得一個D-Bus的名稱後,才會繼續運作。是以通常也要同時設定BusName=才行;

notify:在啟動完成後會發送一個通知消息。還需要配合NotifyAccess來讓Systemd接收消息;

idle:與simple類似,要執行這個daemon必須要所有的工作都順利執行完畢後才會執行。這類的daemon通常是開機到最後才執行即可的服務。

EnvironmentFile:環境配置檔案;

ExecStart:指明啟動unit要運作指令或腳本的絕對路徑;

ExecStartPre:在ExecStart之前運作的絕對路徑;

ExecStartPost:在ExecStart之後運作的絕對路徑;

ExecStop:指明停止unit要運作的指令或腳本的絕對路徑;

Restart:當設定Restart=1時,則當次daemon服務意外終止後,會再次自動啟動。

PrivateTmp:true/false表示是否給服務配置設定獨立的臨時空間

c) [Install]:定義由”systemctl enable”以及”systemctl disable”指令在實作服務啟動或禁用時用到的一些選項,可設定為多使用者。

Alias:别名,可使用systemctl command Alias.service

RequiredBy:被哪些units所依賴,強依賴;

WantedBy:被哪些units所依賴,弱依賴;

Also:安裝本服務的時候還要安裝别的相關服務。

以754的權限儲存後,即可通過 來啟動或停止服務以及配置開機啟動。

systemctl start  shadowsocks      #啟動

systemctl stop shadowsocks       #停止

systemctl restart shadowsocks    #重新啟動

systemctl enable shadowsocks     #開機自動運作

systemctl disable shadowsocks     #禁止開機自動運作

systemctl enable tomcatd.service   #開機自動運作

systemctl start tomcatd                  #啟動

systemctl stop tomcatd                  #停止