--- tags: Unix-like, TODO --- # systemd & systemctl & journalctl [TOC] ## systemd * **平行處理所有服務,加速開機流程** 舊的 init 啟動腳本是一項一項任務依序啟動的模式,systemd 可以讓所有的服務同時啟動,加快系統啟動的速度。 * **一經要求就回應的 on-demand 啟動方式** systemd 全部就是僅有一隻 systemd 服務搭配 systemctl 指令來處理,無須其他額外的指令來支援。由於常駐記憶體,因此任何要求(on-demand)都可以立即處理後續的 daemon 啟動的任務。 * **服務相依性的自我檢查** 如果 B 服務是架構在 A 服務上面啟動的,那當你在沒有啟動 A 服務時啟動 B 服務時, systemd 會自動幫你啟動 A 服務。 * **將多個 daemons 集合成為一個 target** 執行某個 target 就是執行好多個 daemon。 * **向下相容舊有的 init 服務腳本** * **依 daemon 功能分類** 將服務單位 unit 區分為 service、socket、target、path、snapshot、timer 等多種不同的類型 type,方便管理員的分類與記憶。 | Type | Description | |------|-------------| | service | **一般服務**,主要是系統服務,經常被使用到的服務大多是這種類型 | | socket | **內部程序資料交換的插槽服務**,一般用於本機服務比較多,例如我們的圖形界面很多的軟體都是透過 socket 來進行本機程序資料交換 Inter-process communication 的行為 | | target | **執行環境**,一群 unit 的集合 | | mount | **檔案系統掛載相關的服務**,來自網路的自動掛載、NFS 檔案系統掛載等與檔案系統相關性較高的程序管理 | | path | **偵測特定檔案或目錄**,某些服務需要偵測某些特定的目錄來提供佇列服務,例如最常見的列印服務,就是透過偵測列印佇列目錄來啟動列印功能 | | timer | **循環執行的服務**,由 systemd 主動提供的,比 [anacrontab](http://linux.vbird.org/linux_basic/0430cron.php#anacron) 更加有彈性 | ## systemctl systemd 這個啟動服務的機制,主要是透過名為 systemctl 的指令來處理。跟以前 systemV 需要 `service` / `chkconfig` / `setup` / `init` 等指令來協助不同。 * `start` :立刻啟動 * `stop` :立刻關閉 * `restart` :立刻重啟 * `reload` :不關閉 unit 的情況下,重新載入設定檔 * `enable` :設定下次開機時會被啟動 * `disable` :設定下次開機時不會被啟動 * `status` :目前狀態,會列出有沒有正在執行、開機預設執行否、登錄等資訊等 * `is-active` :目前是否運作中 * `is-enabled` :開機時是否啟用 ## journalctl 用來檢索 systemd 的 log。 * `--since`、`--until` :過濾時間。 * `-u` :指定 service。 * `-n` :指定最新的幾筆。 * `-f` :相當於 `tail`。 * `-p` :過濾訊息,priority 分為: ``` 0: emerg 1: alert 2: crit 3: err 4: warning 5: notice 6: info 7: debug ``` ### Configuration 設定檔位於 [`/etc/systemd/journald.conf`](http://man7.org/linux/man-pages/man5/journald.conf.5.html) 。 * `Storage` :預設是 volatile,存在 memory,persistent 則會寫進 `/var/log/journal` 。 ## launchctl Mac 使用 launchctl 來管理系統中的 Process、Application 及 Script。透過 `*.plist` 檔案得知有哪些東西需要管理,所以若要新增任務給 Launchd,我們要新增一個 plist 檔案。檔案建議放在 `~/Library/LaunchAgents` 。 * `load` :載入 * `unload` :移除 * `start` :手動執行 * `list` :列表 ## 參考資料 * [認識系統服務 (daemons) / 鳥哥的 Linux 私房菜](http://linux.vbird.org/linux_basic/0560daemons.php) * [journalctl / man page](http://man7.org/linux/man-pages/man1/journalctl.1.html)