天天看點

【運維】将二進制檔案應用添加到服務通過systemctl管理

一、系統

                    linux環境: Centos 7

 二、配置檔案:

          1、進入service檔案目錄:

                /usr/lib/systemd/system

          2、service檔案解析

          示例:sshd.service檔案

[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target      

            解析:

這個檔案由三個部分組成:Unit\Service\Install

 

[Unit]主要是為了解決依賴關系。常見的添加Requires、After,如果這個依賴是可選的,那麼是Wants、After。依賴關系通常被用在服務(service)而不是(target)上,是以上述的httpd所依賴的僅僅是一些target,因而也就沒有Requires和Wants出現。

[service]可選擇幾種不同的服務啟動方式,啟動方式通過Type參數進行設定。

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

 

修改現存單元檔案

要更改由軟體包提供的單元檔案,先建立名為 /etc/systemd/system/<單元名>.d/ 的目錄(如/etc/systemd/system/httpd.service.d/),然後放入 *.conf檔案,其中可以添加或重置參數。這裡設定的參數優先級高于原來的單元檔案。

例如,如果想添加一個額外的依賴,建立這麼一個檔案即可:

/etc/systemd/system/<unit>.d/customdependency.conf[Unit]Requires=<新依賴>After=<新依賴>

然後運作以下指令使更改生效:

systemctl daemon-reload

 
在services子產品添加以下配置可使服務異常挂掉後自動重新開機
#################### 服務異常重新開機  #########################
StartLimitIntervalSec=0
Restart=always
RestartSec=1
###########################################################



 


可以使用jourlctl來進行systemd相關啟動日志的檢視。

journalctl -b -0  # 顯示本次啟動的資訊

journalctl -b -1  # 顯示上次啟動的資訊


可以通過systemctl status **.service 檢視運作狀态

       

  三、示例:

            本人想将auditbeat二進制工具通過systemctl服務管理

[Unit]
Description=Security Auditbeat Service
DefaultDependencies=no

[Service]
Type=simple
PIDFile=/run/auditbeat.pid
ExecStartPre=/usr/bin/rm -f /run/auditbeat.pid
ExecStart= /root/go/GOPATH/src/github.com/elastic/beats/auditbeat/auditbeat -e -c /root/go/GOPATH/src/github.com/elastic/beats/auditbeat/auditbeat.yml

[Install]
WantedBy=multi-user.target