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コマンドが動いています.
これらを実行すると以下の順序で事が運びます:
- systemctlはD-Busを介してsystemdにmメッセージ「poweroff」「reboot」を送信
- systemdは並列に各ユニットの停止処理を実行
- 最後に
reboot
やpoweroff
自体を実行する
なお, 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に応じてreboot
やpoweroff
が呼ばれる仕様となっています.
systemctlとは?Ubuntuはどのようにサービス管理をしているのか?
Ubuntuでは、システムの起動とサービスの管理に systemd
というLinuxの起動処理やシステム管理を行う仕組み(システム管理デーモン)を採用しています.
なおここでのサービスの意味は, OS本体から切り離し可能な何らかの役割をもったサブシステムのことです.
ログ管理サービスやネットワークサービス、各種サーバープログラム(DBなど)がサービスに当たります.
systemctl
は sytemd
を操作するコマンドと理解しています.
systemdはどの段階で登場するのか?
Linuxの起動はざっくりと以下の4段階によって行われます.
- 電源投入によりBIOSが起動する.
- BIOSからブートローダーが呼び出される.
- ブートローダーがLinuxカーネルを起動する.
- 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
関連ポスト
オンラインマテリアル
(注意:GitHub Accountが必要となります)