reboot コマンド/poweroff コマンドの仕組み

Understanding systemd, systemctl 1/N

公開日: 2021-04-28
更新日: 2023-08-04

  Table of Contents

reboot/poweroffコマンド

Ubuntuを始めとするLinux Distributionを用いるとき再起動やシャットダウンを実行するとき以下のコマンドを用います. 1分後にシャットダウン |コマンド|説明|systemctl対応コマンド| |—|—|—| |reboot [option]|システムを停止して再起動|systemctl poweroff| |poweroff [option]|システムを停止して電源をオフ1分後にシャットダウンにする|systemctl reboot|

rebootコマンド/poweroffコマンドのオプションは

短いオプション 長いオプション 意味
-f --force 強制的に再起動または電源をオフにする

CLIからLinuxを再起動したり, PCの電源をオフにしたりする場合, 伝統的には shutdown コマンドを使用します.

shutdownコマンドによる電源オフ/再起動処理

shutdownコマンドでもpoweroff, reboot処理を実行することも可能です.

1
2
3
4
5
## poweroff
% sudo shutdown -h +5 "Shutdown At 03:48"

## reboot
% sudo shutdown -r +5 "Shutdown At 03:48"
オプション 説明
-h/-r poweroff/rebootの指定, デフォルトではpoweroff = -hの挙動をする
+5 5分後に停止時間の指定, 時間を指定しなかった場合は1分後がデフォルト
Shutdown At 10:43 Wallメッセージ, ログインユーザー全員に通知する

予約したshutdown処理をキャンセルしたい場合は

1
% shutdown -c

時間を指定しなかった場合は1分後がデフォルトなので, 以下のコマンドはどちらもホストを 1分後にシャットダウンするコマンドとなります

1
2
3
4
5
## 1分後にシャットダウン
% shutdown

## こちらも上と同じ
% shutdown +1

ただちにshutdownする場合は

1
% shutdown now

shutdownコマンドとの対応表

command shutdown command
reboot shutdown -r now
poweroff shutdown -h now

rebootコマンドとpoweroffコマンドの実体

rebootコマンドとpoweroffコマンドは共に/usr/bin/systemctlへの「シンボリックリンク」となっています.

1
2
3
4
% ls -l $(which reboot)               
lrwxrwxrwx 1 root root 14 Mar 18 06:36 /usr/sbin/reboot -> /bin/systemctl*
% ls -l $(which shutdown)
lrwxrwxrwx 1 root root 14 Apr 21 21:54 /usr/sbin/shutdown -> /bin/systemctl*

reboot, poweroffそれぞれ実態としてはsystemctlコマンドが動いています. これらを実行すると以下の順序で事が運びます:

  1. systemctlはD-Busを介してsystemdにmメッセージ「poweroff」「reboot」を送信
  2. systemdは並列に各ユニットの停止処理を実行
  3. 最後にrebootpoweroff自体を実行する

なお, shutdownコマンドも現代では同じく/usr/bin/systemctlへの「シンボリックリンク」となっています.

1
2
% ls -l $(which shutdown)
lrwxrwxrwx 1 root root 14 Mar 20 23:32 /usr/sbin/shutdown -> /bin/systemctl*

となっており, optionに応じてrebootpoweroffが呼ばれる仕様となっています.

systemctlとは?Ubuntuはどのようにサービス管理をしているのか?

Ubuntuでは、システムの起動とサービスの管理に systemd というLinuxの起動処理やシステム管理を行う仕組み(システム管理デーモン)を採用しています. なおここでのサービスの意味は, OS本体から切り離し可能な何らかの役割をもったサブシステムのことです. ログ管理サービスやネットワークサービス、各種サーバープログラム(DBなど)がサービスに当たります.

systemctlsytemdを操作するコマンドと理解しています.

systemdはどの段階で登場するのか?

Linuxの起動はざっくりと以下の4段階によって行われます.

  1. 電源投入によりBIOSが起動する.
  2. BIOSからブートローダーが呼び出される.
  3. ブートローダーがLinuxカーネルを起動する.
  4. Linuxカーネルがinitプロセス(PID 1)を起動する.

このinitプロセスが、Linuxの起動処理を司ります. 古くから使われていたのがSysvinitで、Sysvinitの代替えとしてsystemdが採用されています.なお、WSL2はデフォルトでsystemdが動いていないです(設定したい場合はこちら参考)

unit: systemd によるサービス処理の単位

systemd では、システムやサービスの起動を Unit という処理単位で分割しています. Unitの種類は以下

種類 説明
service 各種サービスの起動、停止のコマンドなどを定義しています
device 各種デバイスを表す
mount ファイルシステムをマウントする
swap スワップ領域を有効にする
target 複数のUnitをグループ化する
socket 特定のソケットを監視し接続があるとサービスを起動する

ランレベルとターゲット

従来のランレベルに対応するのが、複数のUnitをグループ化したターゲットです. 従来のシステムランレベルの2または3に相当するものがmulti-user.targetです.ランレベルとは、UNIX System V 系のinit処理を実装したオペレーティングシステムに見られる動作モードです. Linuxがどういう状態で動作しているかを示す数字がランレベルと理解すれば十分です.

通常、ランレベル 0 になるとコンピュータは停止し、ランレベル 6 ではリブートされます. それらの中間のランレベル(1 - 5)は、マウントするディスクドライブ、ネットワークサービスを起動するか否かなどで差異があります. 低いランレベルは、保守や緊急の事態への対処に使われ、ネットワークサービスを起動しないことが多いです.

ランレベル systemd target 内容
0 poweroff.target 停止
1 rescue.target シングルユーザーモード(ネットワークなし), rootだけがログインできるモード
2 multi-user.target マルチユーザーモード(NFSマウントなし, ネットワークなし)
3 multi-user.target CLIによるマルチユーザーモード
4 multi-user.target 未使用
5 graphical.target GUIによるマルチユーザーモード. GUIでのログインの際に使用されます
6 reboot.target システム再起動

Unit構成ファイル

Unitを定義した構成ファイルは、/usr/lib/systemdディレクトリ及び/etc/systemd/systemディレクトリ以下に配置されています.前者はシステムのデフォルト設定で後者は管理者が編集可能なファイルです. systemdを用いたプログラムの自動起動を自作したい場合は、後者のディレクトリでファイルを設定することになります.

systemd のユニットファイルの作り方にかんしてはこちらが参考になります.

systemctlコマンド

Syntax

1
systemctl サブコマンド [Unit] [option]
操作 コマンド
サービス起動 systemctl start ${Unit}
サービス停止 systemctl stop ${Unit}
サービス再起動 systemctl restart ${Unit}
サービスリロード systemctl reload ${Unit}
サービスステータス表示 systemctl status ${Unit}
サービス自動起動有効 systemctl enable ${Unit}
サービス自動起動無効 systemctl disable ${Unit}
サービス自動起動設定確認 systemctl is-enabled ${Unit}
サービス一覧 systemctl list-unit-files –type=service
設定ファイルの再読込 systemctl daemon-reload
システムを再起動 systemctl reboot
システムをシャットダウン systemctl poweroff

References

関連ポスト

オンラインマテリアル



Share Buttons
Share on:

Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)