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 #停止