Linux中國

在 Debian 上使用 systemd 管理系統

這也說明了 systemd 對 Unix 傳承下來的系統處理方式有很大的干擾。「一個軟體只做一件事情」的哲學思想已經被這個新來者徹底顛覆。除了取代了 sysvinit 成為新的系統初始化工具外,systemd 還是一個系統管理工具。目前為止,由於 systemd-sysv 這個軟體包提供的兼容性,那些我們使用慣了的工具還能繼續工作。但是當 Debian 將 systemd 升級到214版本後,這種兼容性就不復存在了。升級措施預計會在 Debian 8 "Jessie" 的穩定分支上進行。從此以後用戶必須使用新的命令來管理系統、執行任務、變換運行級別、查詢系統日誌等等。不過這裡有一個應對方案,那就是在 .bashrc 文件裡面添加一些別名。

現在就讓我們來看看 systemd 是怎麼改變你管理系統的習慣的。在使用 systemd 之前,你得先把 sysvinit 保存起來,以便在 systemd 出錯的時候還能用 sysvinit 啟動系統。這種方法只有在沒安裝 systemd-sysv 的情況下才能生效,具體操作方法如下:

# cp -av /sbin/init /sbin/init.sysvinit 

在緊急情況下,可以把下面的文本:

init=/sbin/init.sysvinit

添加到內核啟動參數項那裡。

systemctl 的基本用法

systemctl 的功能是替代「/etc/init.d/foo start/stop」這類命令,另外,其實它還能做其他的事情,這點你可以參考 man 文檔。

一些基本用法:

  • systemctl - 列出所有單元(UNIT)以及它們的狀態(這裡的 UNIT 指的就是系統上的 job 和 service)
  • systemctl list-units - 列出所有 UNIT
  • systemctl start [NAME...] - 啟動一項或多項 UNIT
  • systemctl stop [NAME...] - 停止一項或多項 UNIT
  • systemctl disable [NAME...] - 將 UNIT 設置為開機不啟動
  • systemctl list-unit-files - 列出所有已安裝的 UNIT,以及它們的狀態
  • systemctl --failed - 列出開機啟動失敗的 UNIT
  • systemctl --type=mount - 列出某種類型的 UNIT,類型包含:service, mount, device, socket, target
  • systemctl enable debug-shell.service - 將一個 shell 腳本設置為開機啟動,用於調試

為了更方便處理這些 UNIT,你可以使用 systemd-ui 軟體包,你只要輸入 systemadm 命令就可以使用這個軟體。

你同樣可以使用 systemctl 實現轉換運行級別、重啟系統和關閉系統的功能:

  • systemctl isolate graphical.target - 切換到運行級別5,就是有桌面的運行級別
  • systemctl isolate multi-user.target - 切換到運行級別3,沒有桌面的運行級別
  • systemctl reboot - 重啟系統
  • systemctl poweroff - 關機

所有命令,包括切換到其他運行級別的命令,都可以在普通用戶的許可權下執行。

journalctl 的基本用法

systemd 不僅提供了比 sysvinit 更快的啟動速度,還讓日誌系統在更早的時候啟動起來,可以記錄內核初始化階段、內存初始化階段、前期啟動步驟以及主要的系統執行過程的日誌。所以,以前那種需要通過對顯示屏拍照或者暫停系統來調試程序的日子已經一去不復返啦

systemd 的日誌文件都被放在 /var/log 目錄。如果你想使用它的日誌功能,需要執行一些命令,因為 Debian 沒有打開日誌功能。命令如下:

# addgroup --system systemd-journal
# mkdir -p /var/log/journal
# chown root:systemd-journal /var/log/journal
# gpasswd -a $user systemd-journal 

通過上面的設置,你就可以以普通用戶許可權使用 journal 軟體查看日誌。使用 journalctl 查詢日誌可以獲得一些比 syslog 軟體更方便的玩法:

  • journalctl --all - 顯示系統上所有日誌,以及它的用戶
  • journalctl -f - 監視系統日誌的變化(類似 tail -f /var/log/messages 的效果)
  • journalctl -b - 顯示系統啟動以後的日誌
  • journalctl -k -b -1 - 顯示上一次(-b -1)系統啟動前產生的內核日誌
  • journalctl -b -p err - 顯示系統啟動後產生的「ERROR」日誌
  • journalctl --since=yesterday - 當系統不會經常重啟的時候,這條命令能提供比 -b 更短的日誌記錄
  • journalctl -u cron.service --since='2014-07-06 07:00' --until='2014-07-06 08:23' - 顯示 cron 服務在某個時間段內列印出來的日誌
  • journalctl -p 2 --since=today - 顯示優先順序別為2以內的日誌,包含 emerg、alert、crit三個級別。所有日誌級別有: emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6), debug (7)
  • journalctl > yourlog.log - 將二進位日誌文件複製成文本文件並保存到當前目錄

Journal 和 syslog 可以很好的共存。而另一方面,一旦你習慣了操作 journal,你也可以卸載掉所有 syslog 的軟體,比如 rsyslog 或 syslog-ng。

如果想要得到更詳細的日誌信息,你可以在內核啟動參數上添加「systemd.log_level=debug」,然後運行下面的命令:

# journalctl -alb 

你也可以編輯 /etc/systemd/system.conf 文件來修改日誌級別。

利用 systemd 分析系統啟動過程

systemd 可以讓你能更有效地分析和優化你的系統啟動過程:

  • systemd-analyze - 顯示本次啟動系統過程中用戶態和內核態所花的時間
  • systemd-analyze blame - 顯示每個啟動項所花費的時間明細
  • systemd-analyze critical-chain - 按時間順序列印 UNIT 樹
  • systemd-analyze dot | dot -Tsvg > systemd.svg - 為開機啟動過程生成向量圖(需要安裝 graphviz 軟體包)
  • systemd-analyze plot > bootplot.svg - 產生開機啟動過程的時間圖表

systemd 雖然是個年輕的項目,但已有大量文檔。首先要介紹給你的是Lennart Poettering 的 0pointer 系列。這個系列非常詳細,非常有技術含量。另外一個是免費桌面信息文檔,它包含了最詳細的關於 systemd 的鏈接:發行版特性文件、bug 跟蹤系統和說明文檔。你可以使用下面的命令來查詢 systemd 都提供了哪些文檔:

# man systemd.index 

不同發行版之間的 systemd 提供的命令基本一樣,最大的不同之處就是打包方式。

via: http://xmodulo.com/2014/07/use-systemd-system-administration-debian.html

譯者:bazz2 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國