如何在Debian上使用systemd管理系統(tǒng)?
譯文【51CTO精選譯文】過不了多久,幾乎沒有一個Linux用戶能夠擺脫Init Wars的越來越甚的控制,除非他們手動選擇退出。近來,systemd帶來的技術(shù)、情緒和社會方面的問題比其他任何一款軟件都要多。這主要逐漸體現(xiàn)在又叫“Init Wars”的激烈討論中:數(shù)月來,Debian開發(fā)者當(dāng)中出現(xiàn)了這番討論。雖然Debian技術(shù)委員會最終決定將systemd納入到Debian 8“Jessie”,但有人竭力想取代總決議(General Resolution)作出的這個決定,甚至有人聲稱不利于贊成systemd的開發(fā)人員的健康。
這恰恰表明了systemd嚴(yán)重妨礙了處理Linux系統(tǒng)的方式:在很大程度上,這種處理方式自Unix時代起就強加給我們。“一種工具適合某項任務(wù)”之類的理論已被新的理論所取代。除了取代sysvinit作為init系統(tǒng)外,systemd深挖系統(tǒng)管理。眼下,你習(xí)慣使用的許多命令都可以繼續(xù)使用,這歸功于程序包systemd-sysv提供的兼容層。一旦systemd 214上傳到Debian,定于在穩(wěn)定分支版中隨Debian 8“Jessie”一同發(fā)布。在此基礎(chǔ)上,用戶需要充分使用systemd隨帶的用于管理服務(wù)、進程、切換運行級別和查詢?nèi)罩鞠到y(tǒng)的新命令。一個變通辦法就是在.bashrc中設(shè)置命令別名。
所以,不妨看一下systemd會如何改變你我管理計算機的習(xí)慣,以及相關(guān)的優(yōu)缺點。在改用systemd之前,保存舊的sysvinit,以便萬一systemd出現(xiàn)故障,仍能夠啟動,這是良好的安全做法。只要systemd-sysv還沒有安裝,舊的sysvinit就能發(fā)揮作用,只要運行這個命令,就很容易獲得sysvinit:
- # cp -av /sbin/init /sbin/init.sysvinit
因而作好了準(zhǔn)備,萬一出現(xiàn)什么緊急情況,只要將
- init=/sbin/init.sysvinit
附加到內(nèi)核引導(dǎo)時間參數(shù)的末尾。
systemctl的基本用法
systemctl是取代原有“/etc/init.d/foo start/stop”的命令,但它具有的功能要多得多,你可以查閱參考手冊頁。
一些基本用法如下:
•systemctl – 列出所有已加載的單元及其狀態(tài)(單元是任務(wù)/服務(wù)的術(shù)語)
•systemctl list-units – 列出所有單元
•systemctl start [NAME...] –啟動(激活)一個或多個單元
•systemctl stop [NAME...] – 停止(停用)一個或多個單元
•systemctl disable [NAME...] – 禁用一個或多個單元文件
•systemctl list-unit-files – 顯示所有已安裝的單元文件及其狀態(tài)
•systemctl --failed – 顯示啟動過程中哪些單元出現(xiàn)故障
•systemctl --type=mount – 類型過濾器;類型可能是:服務(wù)、掛載點、設(shè)備、套接字和啟動目標(biāo)
•systemctl enable debug-shell.service – 啟動TTY 9上的根外殼,用于調(diào)試
如果想更方便地處理單元,還有程序包systemd-ui,它可以由用戶用systemadm命令來啟動。
切換運行級別、重啟和關(guān)閉也由systemctl來處理:
•systemctl isolate graphical.target – 切換到運行級別5,X服務(wù)器在運行級別5運行
•systemctl isolate multi-user.target – 切換到運行級別3和TTY,不帶X圖形界面
•systemctl reboot – 關(guān)閉和重啟系統(tǒng)
•systemctl poweroff – 關(guān)閉系統(tǒng)
除了用于切換運行級別的命令外,所有這些命令都可以由普通用戶來執(zhí)行。
journalctl的基本用法
systemd不僅啟動機器的速度比原來的init系統(tǒng)要快,啟動日志功能的速度也要快得多,包括來自內(nèi)核初始化階段、初始內(nèi)存磁盤、早期啟動邏輯和主系統(tǒng)運行時的消息。所以,這種日子基本上一去不復(fù)返了:你需要使用攝像頭,提供內(nèi)核錯誤或出現(xiàn)其他故障的系統(tǒng)的輸出,以便用于調(diào)試。
就systemd而言,日志聚集在系統(tǒng)日志(journal)中,系統(tǒng)日志位于/var/log/。為了能夠充分利用系統(tǒng)日志,我們需要先設(shè)置系統(tǒng)日志,因為Debian之前沒有為你設(shè)置好它:
- # addgroup --system systemd-journal
- # mkdir -p /var/log/journal
- # chown root:systemd-journal /var/log/journal
- # gpasswd -a $user systemd-journal
這會設(shè)置好系統(tǒng)日志,那樣你可以作為普通用戶來查詢它。使用journalctl查詢系統(tǒng)日志比syslog的工作方式更具有一些優(yōu)勢:
•journalctl --all – 顯示系統(tǒng)的完整日志及其所有用戶
•journalctl -f – 顯示系統(tǒng)日志的實時視圖(相當(dāng)于“tail -f /var/log/messages”)
•journalctl -b – 顯示上一次啟動以來的日志
•journalctl -k -b -1 – 顯示來自上一次啟動前(-b -1)的所有內(nèi)核日志
•journalctl -b -p err – 顯示上一次啟動的日志,僅限于優(yōu)先級“ERROR”
•journalctl --since=yesterday – 由于Linux用戶通常不經(jīng)常重啟,這比-b更加限制了大小
•journalctl -u cron.service --since='2014-07-06 07:00' --until='2014-07-06 08:23' – 顯示了計劃任務(wù)(cron)在指定時間段的日志
•journalctl -p 2 --since=today – 顯示優(yōu)先級2的日志,這包括emerg(***的緊急程度狀態(tài))、alert(緊急狀態(tài))和crit(重要信息);酷似syslog優(yōu)先級emerg(0)、alert(1)、crit(2)、err(3)、warning(4)、notice(5)、info(6)和debug(7)。
•journalctl > yourlog.log – 將二進制格式的系統(tǒng)日志作為文本拷貝到你的當(dāng)前目錄
系統(tǒng)日志和syslog可以一塊使用。另一方面,一旦你對系統(tǒng)日志的工作方式感到滿意,可以清除任何syslog程序包,比如rsyslog或syslog-ng。
想獲得非常詳細(xì)的輸出,將“systemd.log_level=debug”添加到內(nèi)核引導(dǎo)時間參數(shù)列表的末尾,然后運行這個命令:
- # journalctl -alb
日志級別也可以在/etc/systemd/system.conf中加以編輯
使用systemd分析引導(dǎo)過程
Systemd讓你可以高效地分析和優(yōu)化引導(dǎo)過程:
•systemd-analyze – 顯示內(nèi)核和用戶空間上一次引導(dǎo)花了多長時間
•systemd-analyze blame – 顯示每個服務(wù)啟動用了多長時間方面的詳細(xì)信息
•systemd-analyze critical-chain – 打印對時間要求嚴(yán)格的單元鏈的樹結(jié)構(gòu)
•systemd-analyze dot | dot -Tsvg > systemd.svg – 列出引導(dǎo)過程的矢量圖(需要graphviz程序包)
•systemd-analyze plot > bootplot.svg – 生成引導(dǎo)過程的圖形化時間圖
就一個歷史很短、正在大力開發(fā)中的項目而言,systemd的說明文檔編寫相當(dāng)翔實。首先,有Lennart Poettering 編寫的0pointer系列:http://0pointer.de/blog/projects/systemd.html。該系列技術(shù)性很強,相當(dāng)冗長詳細(xì),含有大量信息。另一個不錯的來源是與發(fā)行版無關(guān)的Freedesktop信息頁面:http://www.freedesktop.org/wiki/Software/systemd/,上面列有數(shù)量最多的鏈接,涉及systemd資源、針對特定發(fā)行版的頁面、軟件缺陷追蹤器(bugtracker)和說明文檔。瞄一眼:
- # man systemd.index
大致列出了所有的systemd參考手冊頁。不同發(fā)行版的systemd命令結(jié)構(gòu)基本上一樣,區(qū)別主要出現(xiàn)在封裝上。
英文:http://xmodulo.com/2014/07/use-systemd-system-administration-debian.html