Linuxのhaltコマンドとは?shutdown・poweroffとの違いと安全な使い方

コマンドリファレンス

halt コマンドは、Linuxシステムのすべてのプロセスを終了し、CPUを停止させるコマンドです。
システムの電源が切れるかどうかはハードウェアと設定によって異なり、停止状態のまま電源が入り続けることもあります。サーバーやVPS環境では挙動を理解したうえで使う必要があります。

構文(Syntax)

halt [オプション]

主なオプション一覧

オプション説明使用例
(なし)システムを停止(電源は環境による)halt
-pシステムの電源を切る(power off)halt -p
-f強制的に停止(プロセス終了処理を行わない)halt -f
-dシステムログに情報を残さないhalt -d

haltを実行すると電源が切れるのか?

halt コマンドを実行すると、カーネルはすべてのプロセスを終了してCPUを停止させます。ただし、電源が切れるかどうかは環境によって異なります。

  • systemd環境(Ubuntu、CentOS 7以降など)haltsystemctl halt と同等で、デフォルトではシステムが停止状態になっても電源は入ったままになることがあります。電源まで落としたい場合は poweroff または shutdown -h now を使うのが確実です。
  • 古いSysVinit環境halt は「System halted.」と表示してCPUを停止し、電源は切れません。
  • 電源まで落としたい場合halt -p または poweroffshutdown -h now を使います。

halt・shutdown・poweroff・rebootの違い

システムを停止・再起動するコマンドは複数ありますが、それぞれ動作が異なります。

コマンド動作電源オフ主な用途
haltCPUを停止する環境による(切れない場合もある)システム停止
shutdown -h now安全にシステムを停止する基本的に切れる安全な停止(推奨)
poweroffシステムを停止して電源を切る切れる確実な電源オフ
rebootシステムを再起動する切れない(再起動)システム再起動

haltとshutdownの違い

shutdown は時刻指定・ユーザー通知・安全な停止処理を行う多機能コマンドです。一方、halt は即座にCPUを停止させるシンプルなコマンドです。

  • shutdown -h now:ログイン中のユーザーに通知し、安全にプロセスを終了してから停止する
  • halt:通知なしで即座にCPUを停止する(プロセス終了は行われるが、ユーザー通知なし)

サーバーで使う場合は shutdown -h now の方が安全です。複数ユーザーがログインしている環境では、突然の停止を防ぐために shutdown を使ってください。

haltとpoweroffの違い

poweroff は「システムを停止して電源を切る」ことを明示的に行うコマンドです。halt はCPUを停止させますが、電源オフが保証されません。

  • poweroff:常に電源まで落とす
  • halt:CPUを停止するが、電源が切れないことがある(halt -p で電源まで落とせる)

haltとrebootの違い

reboot はシステムを再起動するコマンドです。halt と目的が根本的に異なります。

  • halt:システムを停止する(起動しなおさない)
  • reboot:システムを停止してから再起動する

systemctl haltとの関係

systemd環境(Ubuntu 16.04以降、CentOS 7以降など現代的なLinuxディストリビューション)では、halt コマンドは内部的に systemctl halt を呼び出します。

sudo systemctl halt      # haltと同等
sudo systemctl poweroff  # 電源まで落とす
sudo systemctl reboot    # 再起動

systemctl halt はsystemdのサービス停止処理を経由するため、より安全に停止できます。ただし電源オフが必要な場合は systemctl poweroff を使ってください。

実行例

システムを停止する(基本)

sudo halt

(CPUが停止します。電源が切れるかどうかは環境による)

安全に停止する(推奨)

sudo shutdown -h now

(ログイン中のユーザーに通知したうえで安全にシステムを停止する。サーバー環境ではこちらが推奨)

電源まで落とす

sudo poweroff

(確実に電源をオフにしたい場合はこちらを使う)

systemctl経由で停止する

sudo systemctl halt

(systemdのサービス停止処理を経由するため、より確実な停止処理が行われる)

強制停止(非常時のみ)

sudo halt -f

(プロセスを強制終了し、ただちに停止します。データ消失の危険があるため、通常は使用しない)

エラー例(root権限なしで実行)

halt

出力例:

halt: Need to be root

sudoが必要な理由

halt はシステム全体に影響するコマンドのため、実行には root権限(または sudo)が必要です。一般ユーザーが誤ってシステムを停止させるのを防ぐための制限です。

sudoグループに追加されているユーザーであれば sudo halt で実行できます。rootユーザーの場合は sudo なしで halt のみでも実行できます。

SSH接続中・サーバー環境での注意点

halt はローカルの物理マシン向けのコマンドです。以下の環境では特に注意が必要です。

SSH接続中に実行するリスク

SSH接続中に halt を実行すると、SSH接続が切断され、その後システムに接続できなくなります。物理アクセスなしに操作できないため、リモート接続でのサーバー管理では halt の使用は避けるべきです。

VPS・クラウド環境での注意点

AWS EC2、Google Cloud、さくらVPS、ConoHaなどのクラウド・VPS環境では:

  • halt を実行するとインスタンスが停止し、コントロールパネルからしか起動できなくなります
  • 一部の環境では「停止中」の状態でも課金が継続する場合があります
  • 再起動が必要な場合は reboot を使い、確実にシャットダウンする場合は管理コンソールから操作することも検討してください

複数ユーザーが使用しているサーバー

他のユーザーがログインしている可能性があるサーバーでは、halt より shutdown を使って事前通知を行うことが推奨されます。

sudo shutdown -h +5 "サーバーを5分後に停止します"

安全に停止したい場合の代替コマンド

安全にシステムを停止したい場合は、halt よりも以下のコマンドを使うことを推奨します。

状況推奨コマンド
すぐに停止して電源を落としたいsudo shutdown -h now
確実に電源を落としたいsudo poweroff
数分後に停止したい(通知あり)sudo shutdown -h +5 "停止します"
systemdで管理された停止をしたいsudo systemctl poweroff

よくある疑問

haltとshutdownはどちらを使うべきか?

特別な理由がなければ shutdown -h now を使う方が安全です。shutdown はプロセスの終了・ディスクの同期・ユーザー通知を安全に行ってから停止します。halt は即座に停止するため、未保存データが失われるリスクがあります。

haltしても電源が切れないことはあるか?

あります。halt はCPUを停止させますが、電源のオフはハードウェアのACPI対応に依存します。古いハードウェアやvm環境では「System halted.」と表示されたまま電源が入り続けることがあります。電源を確実に落としたい場合は poweroff または halt -p を使ってください。

VPSやクラウドサーバーでhaltを使ってよいか?

使えますが、注意が必要です。実行するとSSH接続が切断され、インスタンスがシャットダウン状態になります。再起動にはコントロールパネルからの操作が必要です。誤って実行した場合でも、コンソールからインスタンスを起動しなおせば復旧できます。

cronやスクリプトからhaltを実行してよいか?

技術的には可能ですが、推奨されません。スクリプトから自動停止させる場合は shutdown -h +0poweroff を使う方が確実です。また、sudo権限の設定が必要なため、セキュリティリスクにも注意してください。

関連コマンド

  • shutdown:指定した時刻にシステムを停止・再起動する。ユーザーへの通知機能あり。
  • poweroff:システムを停止して確実に電源を切る。
  • reboot:システムを再起動する。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント