(十八)Linux開機啓動管理---systemd使用

經常使用命令 
使某服務自動啓動php

systemctl enable httpd.service

使某服務不自動啓動nginx

systemctl disable httpd.service

檢查服務狀態sql

systemctl status httpd.service (服務詳細信息) systemctl is-active httpd.service (僅顯示是否 Active)

顯示全部已啓動的服務json

systemctl list-units --type=service

啓動某服務ruby

systemctl start httpd.service

中止某服務bash

systemctl stop httpd.service

重啓某服務app

systemctl restart httpd.service

修改配置文件後重啓

修改配置文件之後,須要從新加載配置文件,而後從新啓動相關服務。ssh

# 從新加載配置文件 $ sudo systemctl daemon-reload # 重啓相關服務 $ sudo systemctl restart foobar

開機服務管理

開機啓動unitphp-fpm

systemctl enable test.service
增長由/lib/systemd/system/到/etc/systemd/system/multi-user.target.wants/下的軟連接 ln -s '/usr/lib/systemd/system/postfix.service' '/etc/systemd/system/multi-user.target.wants/test.service'

一旦修改配置文件,就要讓 SystemD 從新加載配置文件,而後從新啓動,不然修改不會生效。post

$ sudo systemctl daemon-reload $ sudo systemctl restart httpd.service

開機不啓動unit

systemctl disable test.service 刪除/etc/systemd/system/multi-user.target.wants下的軟連接

查看開機是否啓動

systemctl is-enabled test.service #查詢服務是否開機啓動

systemd查看開機自啓動的程序

ls /etc/systemd/system/multi-user.target.wants/

查看systemd單元加載及活動狀況

systemctl

顯示啓動失敗的單元

systemctl --failed

查看systemd管理的全部單元

systemctl list-unit-files

服務管理

啓動服務

systemctl start httpd.service

關閉服務

systemctl stop httpd.service

重啓服務

systemctl restart httpd.service

從新加載

systemctl reload httpd.service

查看狀態

systemctl status httpd.service 包括啓動狀態、啓動時間、主進程及相關進程、相關日誌

systemctl

systemctl是 Systemd 的主命令,用於管理系統。

# 重啓系統 $ sudo systemctl reboot # 關閉系統,切斷電源 $ sudo systemctl poweroff # CPU中止工做 $ sudo systemctl halt # 暫停系統 $ sudo systemctl suspend # 讓系統進入冬眠狀態 $ sudo systemctl hibernate # 讓系統進入交互式休眠狀態 $ sudo systemctl hybrid-sleep # 啓動進入救援狀態(單用戶狀態) $ sudo systemctl rescue

systemctl list-units命令能夠查看當前系統的全部 Unit 。

# 列出正在運行的 Unit $ systemctl list-units # 列出全部Unit,包括沒有找到配置文件的或者啓動失敗的 $ systemctl list-units --all # 列出全部沒有運行的 Unit $ systemctl list-units --all --state=inactive # 列出全部加載失敗的 Unit $ systemctl list-units --failed # 列出全部正在運行的、類型爲 service 的 Unit $ systemctl list-units --type=service
# 顯示某個 Unit 是否正在運行 $ systemctl is-active application.service # 顯示某個 Unit 是否處於啓動失敗狀態 $ systemctl is-failed application.service # 顯示某個 Unit 服務是否創建了啓動連接 $ systemctl is-enabled application.service

配置文件的區塊

[Unit]區塊一般是配置文件的第一個區塊,用來定義 Unit 的元數據,以及配置與其餘 Unit 的關係。它的主要字段以下。

Description:簡短描述
Documentation:文檔地址
Requires:當前 Unit 依賴的其餘 Unit,若是它們沒有運行,當前 Unit 會啓動失敗 Wants:與當前 Unit 配合的其餘 Unit,若是它們沒有運行,當前 Unit 不會啓動失敗 BindsTo:與Requires相似,它指定的 Unit 若是退出,會致使當前 Unit 中止運行 Before:若是該字段指定的 Unit 也要啓動,那麼必須在當前 Unit 以後啓動 After:若是該字段指定的 Unit 也要啓動,那麼必須在當前 Unit 以前啓動 Conflicts:這裏指定的 Unit 不能與當前 Unit 同時運行 Condition:當前 Unit 運行必須知足的條件,不然不會運行 Assert:當前 Unit 運行必須知足的條件,不然會報啓動失敗

!!!重要

eg:After=network.target sshd-keygen.service After字段:表示若是network.target或sshd-keygen.service須要啓動,那麼當前.service應該在它們以後啓動。 相應地,還有一個Before字段,定義sshd.service應該在哪些服務以前啓動。 注意,After和Before字段只涉及啓動順序,不涉及依賴關係。

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

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

[Service]區塊用來 Service 的配置,只有 Service 類型的 Unit 纔有這個區塊。它的主要字段以下。

Type:定義啓動時的進程行爲。它有如下幾種值。 Type=simple:默認值,執行ExecStart指定的命令,啓動主進程 Type=forking:以 fork 方式從父進程建立子進程,建立後父進程會當即退出 Type=oneshot:一次性進程,Systemd 會等當前服務退出,再繼續往下執行 Type=dbus:當前服務經過D-Bus啓動 Type=notify:當前服務啓動完畢,會通知Systemd,再繼續往下執行 Type=idle:如有其餘任務執行完畢,當前服務纔會運行 ExecStart:啓動當前服務的命令 ExecStartPre:啓動當前服務以前執行的命令 ExecStartPost:啓動當前服務以後執行的命令 ExecReload:重啓當前服務時執行的命令 ExecStop:中止當前服務時執行的命令 ExecStopPost:中止當其服務以後執行的命令 RestartSec:自動重啓當前服務間隔的秒數 Restart:定義何種狀況 Systemd 會自動重啓當前服務,可能的值包括always(老是重啓)、on-success、on-failure、on-abnormal、on-abort、on-watchdog TimeoutSec:定義 Systemd 中止當前服務以前等待的秒數 Environment:指定環境變量

Unit 配置文件的完整字段清單,請參考官方文檔。

日誌管理

Systemd 統一管理全部 Unit 的啓動日誌。帶來的好處就是,能夠只用journalctl一個命令,查看全部日誌(內核日誌和應用日誌)。日誌的配置文件是/etc/systemd/journald.conf。

journalctl功能強大,用法很是多。

# 查看全部日誌(默認狀況下 ,只保存本次啓動的日誌) $ sudo journalctl # 查看內核日誌(不顯示應用日誌) $ sudo journalctl -k # 查看系統本次啓動的日誌 $ sudo journalctl -b $ sudo journalctl -b -0 # 查看上一次啓動的日誌(需更改設置) $ sudo journalctl -b -1 # 查看指定時間的日誌 $ sudo journalctl --since="2012-10-30 18:17:16" $ sudo journalctl --since "20 min ago" $ sudo journalctl --since yesterday $ sudo journalctl --since "2015-01-10" --until "2015-01-11 03:00" $ sudo journalctl --since 09:00 --until "1 hour ago" # 顯示尾部的最新10行日誌 $ sudo journalctl -n # 顯示尾部指定行數的日誌 $ sudo journalctl -n 20 # 實時滾動顯示最新日誌 $ sudo journalctl -f # 查看指定服務的日誌 $ sudo journalctl /usr/lib/systemd/systemd # 查看指定進程的日誌 $ sudo journalctl _PID=1 # 查看某個路徑的腳本的日誌 $ sudo journalctl /usr/bin/bash # 查看指定用戶的日誌 $ sudo journalctl _UID=33 --since today # 查看某個 Unit 的日誌 $ sudo journalctl -u nginx.service $ sudo journalctl -u nginx.service --since today # 實時滾動顯示某個 Unit 的最新日誌 $ sudo journalctl -u nginx.service -f # 合併顯示多個 Unit 的日誌 $ journalctl -u nginx.service -u php-fpm.service --since today # 查看指定優先級(及其以上級別)的日誌,共有8級 # 0: emerg # 1: alert # 2: crit # 3: err # 4: warning # 5: notice # 6: info # 7: debug $ sudo journalctl -p err -b # 日誌默認分頁輸出,--no-pager 改成正常的標準輸出 $ sudo journalctl --no-pager # 以 JSON 格式(單行)輸出 $ sudo journalctl -b -u nginx.service -o json # 以 JSON 格式(多行)輸出,可讀性更好 $ sudo journalctl -b -u nginx.serviceqq -o json-pretty # 顯示日誌佔據的硬盤空間 $ sudo journalctl --disk-usage # 指定日誌文件佔據的最大空間 $ sudo journalctl --vacuum-size=1G # 指定日誌文件保存多久 $ sudo journalctl --vacuum-time=1years
相關文章
相關標籤/搜索