天天看點

Systemd 、systemctl程序管理工具

一、systemctl是Systemd 的主指令,可用于管理系統。

列出所有已經加載的systemd units

systemctl
systemctl | grep docker.service
           

列出所有service

systemctl list-units --type=service
systemctl --type=service
           

列出所有active狀态(運作或退出)的服務

systemctl list-units --type=service --state=active
           

列出所有正在運作的服務

systemctl list-units --type=service --state=running
           

列出所有正在運作或failed狀态的服務

systemctl list-units --type service --state running,failed
           

列出所有enabled狀态的服務

systemctl list-unit-files --state=enabled
systemctl list-unit-files    ##enabled和disabled
           

檢視内部指令

#  enable -a
enable .
enable :
enable [
enable alias
enable bg
enable bind
enable break
enable builtin
enable caller
enable cd
enable command
enable compgen
enable complete
enable compopt
enable continue
enable declare
enable dirs
enable disown
enable echo
enable enable
enable eval
enable exec
enable exit
enable export
enable false
enable fc
enable fg
enable getopts
enable hash
enable help
enable history
enable jobs
enable kill
enable let
enable local
enable logout
enable mapfile
enable popd
enable printf
enable pushd
enable pwd
enable read
enable readarray
enable readonly
enable return
enable set
enable shift
enable shopt
enable source
enable suspend
enable test
enable times
enable trap
enable true
enable type
enable typeset
enable ulimit
enable umask
enable unalias
enable unset
enable wait
           

二、systemd

systemd是目前centos系統上主要的系統守護程序管理工具,由于init一方面對于程序的管理是串行化的,容易出現阻塞情況,另一方面init也僅僅是執行啟動腳本,并不能對服務本身進行更多的管理。是以從CentOS 7開始也由systemd取代了init作為預設的系統程序管理工具。

systemd所管理的所有系統資源都稱作Unit,通過systemd指令集可以友善的對這些Unit進行管理。比如systemctl、hostnamectl、timedatectl、localctl等指令,這些指令雖然改寫了init時代使用者的指令使用習慣(不再使用chkconfig、service等指令),但确實也提供了很大的便捷性。

systemd配置檔案

  • 每一個Unit都需要有一個配置檔案用于告知systemd對于服務的管理方式
  • 配置檔案存放于/usr/lib/systemd/system/,設定開機啟動後會在/etc/systemd/system目錄建立軟連結檔案
  • 每個Unit的配置檔案配置預設字尾名為.service
  • 在/usr/lib/systemd/system/目錄中分為system和user兩個目錄,一般将開機不登陸就能運作的程式存在系統服務裡,也就是/usr/lib/systemd/system
  • 配置檔案使用方括号分成了多個部分,并且區分大小寫
Systemd 、systemctl程式管理工具

部署jar程式 實作systemd管理控制

java -jar decode.jar -Dconfig=/usr/local/abc/application.properties
           

代碼

vim  demo.sh

#!/bin/bash
#

source /etc/profile
jarName="abc-web.jar"
workDir="/usr/local/abc"

start(){
    cd ${workDir} && java -jar ${jarName} --spring.profiles.active=prod --server.port=9630 >uams.log 2>&1 &
}

stop(){
    ps -ef | grep -qP "(?<=-jar)\s+${jarName}" && kill $(ps -ef | grep -P "(?<=-jar)\s+${jarName}" | awk '{print $2}')
}

case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
esac
           

編寫systemd配置檔案

vim  /usr/lib/systemd/system/abc.service

[Unit]
Description=uams server
Wants=network-online.target
After=network.target

[Service]
Type=forking
WorkingDirectory=/usr/local/abc/
ExecStart=/bin/bash uams.sh start
ExecStop=/bin/bash uams.sh stop
ExecReload=/bin/bash uams.sh restart
Restart=on-failure

[Install]
WantedBy=multi-user.target