日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

systemd服务详解

發(fā)布時間:2024/1/8 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 systemd服务详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

模塊概述

[Unit]部分

主要是對這個服務的說明,內容, 文檔介紹以及對一些依賴服務定義

  • Description:描述信息
  • After:表明需要依賴的服務,作用決定啟動順序
  • Before:表明被依賴的服務
  • Requles:依賴到的其他unit ,強依賴,即依賴的unit啟動失敗。該unit不啟動。
  • Wants:依賴到的其他unit,弱依賴,即依賴的unit 啟動失敗。該unit繼續(xù)啟動
  • Conflicts:定義沖突關系

處理依賴關系

使用systemd時,可通過正確編寫單元配置文件來解決其依賴關系。典型的情況是,單元A要求單元B在A啟動之前運行。在此情況下,向單元A配置文件中的 [Unit] 段添加 Requires=B 和 After=B 即可。若此依賴關系是可選的,可添加 Wants=B 和 After=B。請注意 Wants= 和 Requires= 并不意味著 After=,即如果 After= 選項沒有制定,這兩個單元將被并行啟動。依賴關系通常被用在服務(service)而不是目標(target)上。例如, network.target 一般會被某個配置網(wǎng)絡接口的服務引入,所以,將自定義的單元排在該服務之后即可,因為 network.target 已經啟動。

[Service]部分

服務的主體定義,主要定義服務的一些運行參數(shù),及操作動作

  • Type:

    • simple: 默認值,執(zhí)行ExecStart指定的命令,啟動主進程
    • forking: 以 fork 方式從父進程創(chuàng)建子進程,創(chuàng)建后父進程會立即退出,子進程將成為主進程
    • oneshot: 一次性進程,類似于simple,但只執(zhí)行一次,Systemd 會等當前服務退出,再繼續(xù)往下執(zhí)行
    • dbus: 當前服務通過D-Bus啟動,類似于simple,但會等待 D-Bus 信號后啟動
    • notify: 當前服務啟動完畢,會發(fā)出通知信號通知Systemd,然后 Systemd 再繼續(xù)啟動其他服務
    • idle: 類似于simple,但是要等到其他任務都執(zhí)行完畢,才會啟動該服務。一種使用場合是為讓該服務的輸出,不與其他服務的輸出相混合
  • User:指定開機自動運行該程序的用戶名

  • Group:指定開機自動運行該程序的用戶組

  • LimitCORE=infinity:限制內核文件的大小

  • LimitNOFILE=65536:服務最大允許打開的文件描述符數(shù)量

  • LimitNPROC=65536:進程的最大數(shù)量

  • PIDFile:指定開機自動運行該程序的pid文件(一般在程序配置文件中配置該項)

  • ExecStart:啟動當前服務的命令

  • ExecStartPre:啟動當前服務之前執(zhí)行的命令

  • ExecStartPost:啟動當前服務之后執(zhí)行的命令

  • ExecReload:重啟當前服務時執(zhí)行的命令

  • ExecStop:停止當前服務時執(zhí)行的命令

  • ExecStopPost:停止當其服務之后執(zhí)行的命令

  • KillMode:定義如何停止服務。KillMode字段可以設置的值如下

    • control-group(默認值):當前控制組里面的所有子進程,都會被殺掉;
    • process:只殺主進程;
    • mixed:主進程將收到SIGTERM信號,子進程收到SIGKILL信號;
    • none:沒有進程會被殺掉,只是執(zhí)行服務的stop命令。如ssh服務將KillMode設為process,不停止任何sshd子進程,即子進程打開的SSH session仍然保持連接,這個設置不太常見,但對 sshd 很重要,否則你停止服務的時候,會連自己打開的 SSH session一起殺掉。
  • KillSignal: 設置殺死進程的第一步使用什么信號, 默認值為 SIGTERM 信號。

  • RestartSec:自動重啟當前服務等待的秒數(shù)

  • Restart:定義了當前服務退出后,Systemd的重啟方式,可能的值包括

    • no(默認值):退出后不會重啟;
    • always:不管是什么退出原因,總是重啟;
    • on-success:只有正常退出時(退出狀態(tài)碼為0),才會重啟;
    • on-failure:非正常退出時(退出狀態(tài)碼非0),包括被信號終止和超時,才會重啟;
    • on-abnormal:只有被信號終止和超時,才會重啟;
    • on-abort:只有在收到沒有捕捉到的信號終止時,才會重啟;
    • on-watchdog:超時退出,才會重啟,如ssh服務設置為on-failure,表示任何意外的失敗,就將重啟sshd。如果sshd正常停止(比如執(zhí)行systemctl stop命令),它就不會重啟。
  • RemainAfterExit:值為yes或no,表示進程退出以后,服務仍然保持執(zhí)行。這樣的話,一旦使用systemctl stop命令停止服務,ExecStop指定的命令就會執(zhí)行

  • TimeoutSec:定義 Systemd 停止當前服務之前等待的秒數(shù)

  • Environment:指定當前服務的環(huán)境變量

  • EnvironmentFile:指定當前服務的環(huán)境參數(shù)文件,該文件的key=value鍵值對,可以用$key的形式,在當前配置文件中獲取

  • 所有的啟動設置都可以加上一個連詞號(-),表示"抑制錯誤",即發(fā)生錯誤的時候,不影響其他命令的執(zhí)行。比如,EnvironmentFile=-/etc/sysconfig/sshd,表示即使/etc/sysconfig/sshd文件不存在,也不會拋出錯誤。

  • PrivateTmp 的值設置成true ,服務啟動時會在/tmp目錄下生成類似systemd-private-433ef27ba3d46d8aac286aeb1390e1b-nginx.service-RedVyu的文件夾,用于存放nginx的臨時文件。

[Install]部分

服務安裝的相關設置,一般可設置為多用戶的

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

配置文件示例

sshd服務

[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

nginx服務

[Unit] Description=The nginx HTTP and reverse proxy server After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target[Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/bin/rm -f /run/nginx.pid ExecStartPre=/usr/sbin/nginx -t ExecStart=/usr/sbin/nginx ExecReload=/usr/sbin/nginx -s reload KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=process PrivateTmp=true[Install] WantedBy=multi-user.target

Tomcat服務

## YUM安裝 [Unit] Description=Apache Tomcat Web Application Container After=syslog.target network.target[Service] Type=simple EnvironmentFile=/etc/tomcat/tomcat.conf Environment="NAME=" EnvironmentFile=-/etc/sysconfig/tomcat ExecStart=/usr/libexec/tomcat/server start SuccessExitStatus=143 User=tomcat[Install] WantedBy=multi-user.target## 二進制安裝 [Unit] Description=tomcat After=network.target[Service] Type=forking Environment="export JAVA_HOME=/opt/jdk" Environment="export JAVA_BIN=$JAVA_HOME/bin" Environment="export JRE_HOME=$JAVA_HOME/jre" Environment="export CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib" Environment="export PATH=$PATH:$JAVA_HOME/bin" ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh Restart=on-failure[Install] WantedBy=multi-user.target

java服務

[Unit] Description=Manage Java service After=network.target[Service] Type=simple User=loan Group=loan WorkingDirectory=/app ExecStart=/bin/bash -c "source /etc/profile; java -Xms8192m -Xmx8192m -XX:PermSize=4096m -XX:MaxPermSize=4096m -jar online-server-1.0-SNAPSHOT.jar>/app/online-server.log 2>&1" StandardOutput=null StandardError=null Restart=on-failure StartLimitInterval=120 StartLimitBurst=3 ReStartSec=5[Install] WantedBy=multi-user.target

StartLimitInterval=120

StartLimitBurst=3

ReStartSec=5

表示2分鐘內服務重啟超過3次(每次重啟間隔5s), 就不再重啟了

StandardOutput=null
StandardError=null

不將程序日志輸出到syslog

kill與信號量

TERM

  • 發(fā)送 TERM 信號到指定進程,如果進程沒有捕獲該信號,則進程終止
  • If no signal is specified, the TERM signal is sent. The TERM signal will kill processes which do not catch this signal.

語法格式

kill -s TERM <pid>systemd用法 ExecStop=/bin/kill -s TERM $MAINPID

友好告訴進程退出,進程先保存好數(shù)據(jù),再正常退出。
給父進程發(fā)送一個 TERM 信號,試圖殺死它和它的子進程。
請求徹底終止某項執(zhí)行操作.它期望接收進程清除自給的狀態(tài)并退出

HUP

  • 讓 Linux 緩和的執(zhí)行進程關閉,然后重啟。在對配置文件修改后需要重啟進程時可發(fā)送此信號。

語法格式

kill -s HUP <pid>systemd用法 ExecReload=/bin/kill -s HUP $MAINPID

QUIT

等同于Ctrl + C

systemd用法 ExecStop=/bin/kill -s QUIT $MAINPID

總結

以上是生活随笔為你收集整理的systemd服务详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。