はじめに
今回は systemd と systemctl の学習備忘録です。
OS の起動プロセス
OS は起動時に以下のフローでプロセスが起動されていきます。
最後に init プロセスが起動されますが、systemd はこの init プロセスの種類の内の一つに該当します。
- 電源ON
- BIOS の起動
- ハードウェアの初期化・設定
- メモリ状態のチェック
- 起動するデバイス( OS、ディスク等 )の設定・チェック
- bootloader の実行
- bootloader の起動
- カーネルをメモリにロードする
- カーネルの起動
- メモリを初期化し、initプロセスを起動するための一時的な( initramfs )をマウントする
- init プロセスの起動
- /etc/init.d に格納されているプロセスを起動する
init プロセスとは
プロセスはメモリを利用して動くプログラムである。
一方で、initプロセス はシステム起動時において最初に起動される、他のプロセスを起動する役目を持ったプロセスを指す。
init プロセスは複数種類があるが、よく使われるのは systemd である。
initプロセスの種類 | 説明 |
---|---|
SysVinit | 並列起動できずに起動するのに時間がかかる init プロセス |
Upstart | サービスの起動準備が整ったらイベントを受け取り、並列にサービスを起動する |
systemd | 細かい制御が可能で、必要なサービスのみ並列に高速に起動することができる |
systemctl コマンド
systemd で制御しているサービスを管理するコマンド
systemctl オプション サービス名
のように利用する。
オプション | 説明 |
---|---|
start | サービスを起動 |
stop | サービスを停止 |
restart | サービスを再起動 |
reload | サービスに新しい設定を読み込む |
status | サービスの状態を確認する |
enable | OS 起動時にサービスが起動されるようにする |
disable | OS 起動時にサービスが起動しないようにする |
daemon-reload | 新たにサービスを作成した場合に設定を読み込み直す |
設定ファイルを格納したディレクトリ
/usr/lib/systemd/system
主に各サービスの設定を記述したファイルを格納
/etc/systemd/system
主に /usr/lib/systemd/system
に格納したファイルのリンクを格納
Unit とは
systemd が立ち上げるプログラムの単位
設定内容一覧
Unit セクション : 各ユニットの説明や、依存関係を設定
- Description: Unit の説明文
- Requires: この Unit が必要とする別の Unit
- Before: この Unit より後に起動すべき Unit
Service セクション : 実行する処理内容や作業ディレクトリなど詳細な設定
- User: 実行ユーザ
- ExecStart: サービスの起動コマンド
- WorkingDirectory: サービスが実行されるときのカレントディレクトリ
Install セクション : enable / disable 時の挙動の設定
- WantedBy: 動作モード
おわりに
systemctl と systemd を使いこなして、自分好みの環境を作りましょう。