CentOS 7下關於systemd的一些嘮叨話二:systemd服務腳本的編寫


CentOS 7繼承了RHEL 7的新的特性,例如強大的systemd,而systemd的使用也使得以往系統服務的/etc/init.d的啟動腳本的方式就此改變,也大幅提高了系統服務的運行效率。但服務的配置和以往也發生了極大的不同,說實在的,變的簡單而易用了許多。

 

systemd:

    CentOS 7的服務systemctl腳本存放在:/usr/lib/systemd/,有系統(system)和用戶(user)之分,即:/usr/lib/systemd/system ,/usr/lib/systemd/user

    每一個服務以.service結尾,一般會分為3部分:[Unit]、[Service]和[Install],就以nginx為例吧,具體內容如下:

 

創建service:

在/usr/lib/systemd/system下創建nginx.service文件內容如下(看應用需求也可以在 /usr/lib/systemd/usr下創建):

 

[Unit]
Description=nginx
Documentation=http://nginx.org/en/docs/
After=network.target  remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

 

[Unit]

Description : 服務的簡單描述
Documentation : 服務文檔

After= : 依賴,僅當依賴的服務啟動之后再啟動自定義的服務單元

[Service]

Type : 啟動類型simple、forking、oneshot、notify、dbus

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認為服務就緒。

PIDFile : pid文件路徑,對應程序的,比如nginx默認就放在logs目錄下
ExecStartPre :啟動前要做什么,上文中是測試配置文件 -t  
ExecStart:啟動 
ExecReload:重載 
ExecStop:停止 

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

[Install]

WantedBy:服務安裝的用戶模式,從字面上看,就是想要使用這個服務的有是誰?上文中使用的是:multi-user.target ,就是指想要使用這個服務的目錄是多用戶。「以上全是個人理解,瞎猜的,如有不當,請大家多多指教」每一個.target實際上是鏈接到我們單位文件的集合,當我們執行:

 
 #systemctl enable nginx.service

 


就會在/etc/systemd/system/multi-user.target.wants/目錄下新建一個/usr/lib/systemd/system/nginx.service 文件的鏈接。

操作Service:

#啟動服務
$ systemctl start nginx.service
 
#查看日志
$ journalctl -f -u nginx.service
[root@localhost ~]# journalctl -f -u nginx.service
-- Logs begin at 一 2015-11-16 14:47:18 CST. --
11月 16 14:47:38 localhost.localdomain systemd[1]: Starting nginx...
11月 16 14:47:39 localhost.localdomain nginx[907]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
11月 16 14:47:39 localhost.localdomain nginx[907]: nginx: configuration file /etc/nginx/nginx.conf test is successful
11月 16 14:47:40 localhost.localdomain systemd[1]: Failed to read PID from file /usr/local/nginx/logs/nginx.pid: Invalid...ument
11月 16 14:47:40 localhost.localdomain systemd[1]: Started nginx.


 
#重啟
$ systemctl restart nginx.service
 
#重載
$ systemctl reload nginx.service
 
#停止
$ systemctl stop nginx.service

 

 


免責聲明!

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



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