centos7使用systemd將spring boot項目註冊爲服務步驟以及參數詳解

本文參考了http://www.jinbuguo.com/

系統版本:centos7.2

註冊服務sh腳本內容:

#!/bin/bash
echo "**************************************"
echo "*****                            *****"
echo "***       呵呵呵                  ***"
echo "*****                            *****"
echo "**************************************"
    install_dir=$(cd `dirname $0`; pwd)
    echo "=====>設置XServer啓動項"
    rm -rf /lib/systemd/system/XServer.service
    touch /lib/systemd/system/XServer.service
    echo "[Unit]" >> /lib/systemd/system/XServer.service
    echo "Description=XServer" >> /lib/systemd/system/XServer.service
    echo "After=network.target remote-fs.target nss-lookup.target" >> /lib/systemd/system/XServer.service
    echo "[Service]" >> /lib/systemd/system/XServer.service
    echo "Type=forking" >> /lib/systemd/system/XServer.service
    echo "WorkingDirectory="${install_dir} >> /lib/systemd/system/XServer.service
    # echo "ExecStart="${install_dir}"/jdk1.8.0_221/bin/java -jar "${install_dir}"/xServer.jar" >>/lib/systemd/system/XServer.service
    echo "ExecStart="${install_dir}"/startXServer.sh" >>/lib/systemd/system/XServer.service
    echo "PrivateTmp=true" >> /lib/systemd/system/XServer.service
    echo "[Install]" >> /lib/systemd/system/XServer.service
    echo "WantedBy=multi-user.target" >> /lib/systemd/system/XServer.service
    echo "=====> XServer配置完畢!";
    systemctl daemon-reload
    systemctl enable XServer.service
    systemctl start XServer.service

以下是命令說明:

install_dir=$(cd `dirname $0`; pwd)

獲取sh命令執行的當前目錄

echo "[Unit]" >> /lib/systemd/system/XServer.service

echo是向系統服務文件XServer.service中寫入內容,也就是雙引號裏的內容,XServer.service是我們的軟件對應的服務文件描述了服務配置信息。service文件和Systemd有關,Systemd是是linux下的一款系統和服務管理器,兼容SysV和LSB的啓動腳本。Systemd的特徵有:支持並行化任務;同時採用socket式與D-Bus總線式激活服務;按需啓動守護進程(daemon);利用Linux的cgroups監視進程;支持快照和系統恢復;維護掛載點和自動掛載點;各服務間基於依賴關係進行精密控制。
其中的監視和控制功能的主要命令就是systemctl。

這裏的**[Unit]**下面是一些服務的基本配置。

echo "Description=XServer" >> /lib/systemd/system/XServer.service

向service文件寫入服務的描述

echo "After=network.target remote-fs.target nss-lookup.target" >> /lib/systemd/system/XServer.service

Before、After:定義啓動順序。Before=xxx.service,代表本服務在xxx.service啓動之前啓動。After=xxx.service,代表本服務在xxx.service之後啓動。

network.target:此目標單元用於表明網絡可用,但是由於其定義的脆弱性, 它事實上只有一個用途: 在關機時, 確保所有包含 After=network.target 的單元 都在關閉網絡(無論網絡實際處於何種狀態)之前被優先關閉。

remote-fs.target:專用於集合遠程文件系統掛載點的目標單元。

nss-lookup.target:專用於標記所有主機與網絡的名字查找服務都已可用的目標單元。 注意,這不包括用戶/組的名字查找功能,這是 nss-user-lookup.target 的功能。 所有依賴於主機與網絡的名字查找服務的服務單元, 都必須排在該目標單元之後啓動, 但卻不應該包含它。

其它服務單元的信息可查看:http://www.jinbuguo.com/systemd/systemd.special.html

echo "[Service]" >> /lib/systemd/system/XServer.service

[Service]代表開始服務運行參數的設置。

Type=forking以 fork 方式從父進程創建子進程,創建後父進程會立即退出。

WorkingDirectory設置進程的工作目錄。 既可以設爲特殊值 “~” 表示 User= 用戶的家目錄,也可以設爲一個以 RootDirectory= 爲基準的絕對路徑。 例如當 RootDirectory=/sysroot 並且 WorkingDirectory=/work/dir 時,實際的工作目錄將是 /sysroot/work/dir 。 當 systemd 作爲系統實例運行時,此選項的默認值是 / ; 當 systemd 作爲用戶實例運行時,此選項的默認值是對應用戶的家目錄。 如果給目錄加上 “-” 前綴,那麼表示即使此目錄不存在,也不算致命錯誤。 如果未設置 RootDirectory=/RootImage= 選項,那麼爲 WorkingDirectory= 設置的絕對路徑 將以主機(或容器)的根目錄(也就是運行 systemd 的系統根目錄)爲基準。 具體可參考:http://www.jinbuguo.com/網址的《systemd中文手冊》中的systemd.exec 中文手冊。

echo "ExecStart="${install_dir}"/startXServer.sh" >>/lib/systemd/system/XServer.service

設置啓動方式,這裏指定了一個sh文件來啓動。

echo "PrivateTmp=true" >> /lib/systemd/system/XServer.service

PrivateTmp設爲 yes 表示在進程的文件系統名字空間中掛載私有的 /tmp 與 /var/tmp 目錄, 也就是不與名字空間外的其他進程共享臨時目錄。 這樣做會增加進程的臨時文件安全性,但同時也讓進程之間無法通過 /tmp 或 /var/tmp 目錄進行通信。 同時,當服務停止之後,所有先前在臨時目錄中創建的文件都將被刪除。 可以通過 JoinsNamespaceOf= 選項(參見www.jinbuguo.com systemd.unit(5) 手冊)將多個單元 運行在同一個名字空間的私有 /tmp 與 /var/tmp 中。 當 DynamicUser=yes 時,此設置的默認值爲 yes ,否則默認值爲 no 。 注意,與 ReadOnlyPaths= 一樣,使用此選項之後,文件系統的掛載將無法從主機向服務傳遞(但從服務向主機的傳遞依然有效)。 開啓此選項的同時也隱含的在該單元中添加了對 /tmp 與 /var/tmp 掛載點 的 Requires= 與 After= 依賴, 以及對 systemd-tmpfiles-setup.service(8) 單元的 After= 依賴。

echo "[Install]" >> /lib/systemd/system/XServer.service

[Install]通常是配置文件的最後一個區塊,用來定義如何啓動,以及是否開機啓動。它的主要字段如下。

WantedBy:它的值是一個或多個 Target,當前 Unit 激活時(enable)符號鏈接會放入/etc/systemd/system目錄下面以 Target 名 + .wants後綴構成的子目錄中
RequiredBy:它的值是一個或多個 Target,當前 Unit 激活時,符號鏈接會放入/etc/systemd/system目錄下面以 Target 名 + .required後綴構成的子目錄中
Alias:當前 Unit 可用於啓動的別名
Also:當前 Unit 激活(enable)時,會被同時激活的其他 Unit

echo "WantedBy=multi-user.target" >> /lib/systemd/system/XServer.service

接受一個空格分隔的單元列表, 表示在使用 systemctl enable 啓用此單元時, 將會在每個列表單元的 .wants/ 或 .requires/ 目錄中創建一個指向該單元文件的軟連接。 這相當於爲每個列表中的單元文件添加了 Wants=此單元 或 Requires=此單元 選項。 這樣當列表中的任意一個單元啓動時,該單元都會被啓動。

在本例子中,執行 systemctl enable 啓用命令之後, 將會建立一個指向該單元文件的軟鏈接 /etc/systemd/system/multi-user.target.wants/XServer.service , 表示將 XServer.service 包含到 multi-user.target 目標中, 這樣,當啓動 multi-user.target 目標時, 將會自動起動 XServer.service 服務。 同時,systemctl disable 命令將會刪除這個軟連接。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章