【Linux】shutdownコマンドの使い方まとめ!即時終了・再起動・時間指定・キャンセルまで解説

コマンドリファレンス

Linuxサーバーを管理していると、「今すぐサーバーを安全に停止したい」「カーネルアップデート後に再起動したい」「深夜のメンテナンス作業で時間指定予約をしたい」という場面に必ず直面します。しかし、本番環境でのシャットダウン操作は心臓がバクバクしますよね。もし打ち間違えてリモート接続が切れたら……と冷や汗をかいた経験があるエンジニアも多いはずです。

Linuxでシステムの停止や再起動を行う最も安全で標準的なコマンドが shutdown です。この記事では、今すぐコピペして使える 主要オプション早見表 から、即時停止・再起動・時間指定・キャンセルの具体的な実行実例、さらにはSSHリモート作業での事故防止策まで、インフラ現場で必須となる安全手順を網羅してわかりやすく解説します。

【結論】shutdownコマンドの主要オプション早見表(即コピペOK)

「今すぐコマンドを叩きたい!」という方のために、実務で頻出する主要な実行コマンドを一覧表にまとめました。すべて sudo 権限で実行します。

やりたいこと実行コマンド解説
即時停止(電源OFF)sudo shutdown -h now全プロセスを安全に終了し、即座にシステムの電源を切る
即時再起動sudo shutdown -r now全サービスを安全停止・ディスク同期後に即座にOSを再起動
時間指定停止(相対分数)sudo shutdown +15 "システムメンテナンスのため停止"15分後に停止。全ログインユーザーへ予告メッセージを一斉通知
時刻指定停止(絶対時刻)sudo shutdown 23:30本日の23:30に停止(5分前に一般ユーザーの新規ログインを自動遮断)
相対時間で再起動sudo shutdown -r +10 "カーネル更新のため再起動"10分後に自動再起動。カウントダウン通知を端末に配信
予約のキャンセルsudo shutdown -c "メンテナンス中止"予約中の停止・再起動を直ちに取り消し、中止メッセージを通知
予約状況の確認shutdown --show予約済みのシャットダウン予定時刻とモードを表示(systemd環境)
通知テスト(停止しない)sudo shutdown -k +15 "停止テスト通知"実際にはシャットダウンせず、警告メッセージのみを一斉配信

慌てて実行したシャットダウン予約を取り消したいときは、慌てず sudo shutdown -c 一発で解決します。ここからは各コマンドの詳しい構文と実務での安全な使い分けを見ていきましょう。

shutdownコマンドの基本構文と実行権限(sudoが必要な理由)

shutdown コマンドは、Linuxカーネルに対して安全なシステム停止や再起動を指示するための管理コマンドです。まずは基本的な構文と、なぜ実行時に管理者権限が必要なのかを押さえておきましょう。

基本書式: shutdown [オプション] [時間] [メッセージ]

shutdown コマンドの構文ルールは非常にシンプルです。

sudo shutdown [オプション] [時間] [メッセージ]

3つの引数はそれぞれ以下の役割を持っています。

  • オプション : システム停止(-h / -P)、再起動(-r)、予約キャンセル(-c)、通知テスト(-k)などの動作を指定します。
  • 時間 : いつ実行するかを指定します。即時実行の now、相対時間を表す +分(例: +15)、絶対時刻を表す hh:mm(例: 23:30)のいずれかを指定します。
  • メッセージ : ログインしている全ユーザーのターミナル画面に一斉配信する警告メッセージ(任意指定)です。ダブルクォートで囲んで記述します。

時間引数を省略した場合、現代のLinux(systemd系)ではデフォルトで「1分後(+1)」にスケジュールされます。「今すぐ実行したい」場合は必ず明示的に now を指定してください。

一般ユーザーで実行できない理由とsudoの利用

一般ユーザーで shutdown コマンドを実行しようとすると、通常は以下のようなエラーが出力されて拒否されます。

$ shutdown -h now
Failed to set wall message, ignoring: Access denied
Failed to power off system via logind: Access denied
Failed to open /dev/initctl: Permission denied
Failed to talk to init daemon.

サーバーの電源遮断や再起動は、稼働中の全サービスやデータベース、接続中の他ユーザーの作業を強制中断させる重大なシステム操作です。そのため、セキュリティ上の安全設計として root(スーパーユーザー)権限 を持つユーザーのみに実行が制限されています。

日常的な運用保守では、rootアカウントに直接ログインするのではなく、一般ユーザーに管理者権限を一時的に付与する sudo コマンドを頭に付けて実行するのがLinuxのセキュリティベストプラクティスです。

# sudoを付与して管理者権限で実行
sudo shutdown -h now

ユーザーごとの権限付与方法や sudo の詳細な仕組みについては、Linuxのsudoコマンドの正しい使い方と権限付与 で詳しく解説していますので併せてご確認ください。

よく使う実行パターンと実例

実務の現場で毎日のように使われる具体的な実行パターンを、コード例とともに詳しく見ていきましょう。

即時シャットダウン(now)と即時再起動(-r)

今すぐサーバーを停止したい場合、あるいはカーネルアップデートやOS設定の反映で再起動したい場合の手順です。

# 【推奨】最も確実な即時電源断コマンド
sudo shutdown -h now

# 今すぐ安全に再起動するコマンド
sudo shutdown -r now

【技術解説】shutdown now と shutdown -h now の違い

「単に sudo shutdown now と打つだけではダメなの?」と疑問に思うかもしれません。

古いSysVinit時代のLinux環境では、shutdown now を実行するとシングルユーザーモード(メンテナンスモード)へ移行し、CPUは停止するものの マザーボードの電源が通電したまま切れない という現象がありました。-h(halt / poweroff)を明示することで、ハードウェアの電源断(ACPIシャットダウン)まで確実に処理されます。

現在のsystemdを採用したモダンなLinuxディストリビューション(Ubuntu、Debian、RHEL、Rocky Linux、AlmaLinux等)では、shutdown now でも自動的に電源断(poweroff)へ遷移するよう設計されています。しかし、ディストリビューションのバージョン差異やレガシーサーバーでの誤動作を防ぐため、「即時停止は必ず -h now を打つ」 ことを習慣づけるのがインフラ現場の鉄則です。

また、再起動時の -r now は、単にいきなり電源を切るわけではありません。実行中の全プロセスに対して SIGTERM(正常終了要求)を送り、猶予時間内に終了しなかったプロセスに SIGKILL(強制終了)を発行します。その後、メモリ上のキャッシュデータをストレージへ安全に書き出し(sync処理)、ファイルシステムを読み取り専用(Read-Only)にアンマウントしてから再起動を行います。そのため、データベースやファイルが破損する心配なく安全に再起動できます。

時間指定シャットダウン(+m と hh:mm)

本番稼働中のサーバーでは、深夜帯やアクセス数が極小になる時間帯を狙ってメンテナンスを行うのが一般的です。shutdown コマンドには、指定した時間まで停止・再起動を保留するタイマー機能が標準で備わっています。

指定方法は 相対時間(+m) と 絶対時刻(hh:mm) の2パターンがあります。

# 【相対時間】今から15分後にシャットダウンを予約
sudo shutdown -h +15 "システムメンテナンスのため15分後に停止します"

# 【相対時間】今から30分後にシステムを再起動
sudo shutdown -r +30 "カーネルパッチ適用のための再起動"

# 【絶対時刻】本日の23:30にシャットダウンを予約
sudo shutdown -h 23:30 "本日の定期点検に伴う停止"

# 【絶対時刻】深夜03:00に自動再起動
sudo shutdown -r 03:00 "深夜バッチ後のOS再起動"

【注意】絶対時刻指定における「翌日扱い」の罠

絶対時刻(hh:mm)で時間を指定する場合、入力ミスに注意が必要です。

例えば、現在時刻が 15:00 のときに sudo shutdown -h 14:00 と過去の時刻を指定してしまった場合、コマンドはエラーにならず、「翌日の14:00」 としてスケジュールされます。実行直後に「あれ?停止しないぞ」と放置してしまうと、翌日の昼間にいきなりサーバーが電源断を起こす大事故に繋がりかねません。絶対時刻を指定した際は、後述する予約確認コマンドで予定日時を必ず確認してください。

ログイン中ユーザーへの警告メッセージ配信(ウォールメッセージ)

複数人のエンジニアが同時にログインして開発・保守を行っている共有サーバーでは、事前告知なしにシャットダウンを強行すると作業中データを消失させてしまいます。

shutdown コマンドの末尾にメッセージ文字列を付与して時間指定を実行すると、SSHやコンソールでログインしている全ユーザーの端末画面へブロードキャスト通知(wallメッセージ)が自動送信されます。

# 10分後の再起動と予告メッセージを同時配信
sudo shutdown -r +10 "【重要】10分後にサーバーを再起動します。作業中のファイルを保存してログアウトしてください。"

ログインしているユーザーの端末には、作業中であっても以下のような枠線付きの割り込み通知が届きます。

Broadcast message from root@webserver (pts/0) (Mon Oct 5 14:00:00 JST):

【重要】10分後にサーバーを再起動します。作業中のファイルを保存してログアウトしてください。
The system is going down for reboot at Mon Oct 5 14:10:00 JST!

また、「シャットダウンメッセージが他ユーザーの画面にちゃんと通知されるか事前にテストしたい」という場合は、-k オプション(kidding = 冗談・テストの意味)を使用します。

# 警告メッセージだけを一斉配信(実際にはシステムを停止しない)
sudo shutdown -k +15 "【テスト通知】これは定期メンテナンス通知の表示テストです"

このコマンドを実行してもシステムは停止しないため、運用マニュアルの検証や通知テストを安全に行えます。

予約したシャットダウンのキャンセル方法(shutdown -c)

「時間の指定を間違えてしまった!」「緊急作業が入ったのでシャットダウンを延期したい!」という場合も慌てる必要はありません。-c(cancel)オプションを実行すれば、予約中のシャットダウンや再起動を瞬時に取り消せます。

# 予約中のシャットダウンを即座にキャンセル
sudo shutdown -c

# 理由メッセージを添えてキャンセルを全ユーザーに通知
sudo shutdown -c "緊急メンテナンス作業が延期になったため、停止処理を中止しました"

キャンセルを実行すると、ログイン中の全ユーザー端末へ「シャットダウンが中止された旨」が通知されます。

ただし、sudo shutdown -h now や sudo shutdown -r now のように即時実行(now)してしまった処理はキャンセルできません。エンターキーを押した瞬間に停止シーケンスが走るため、即時コマンドを実行する前には必ず深呼吸して対象ホスト(サーバー名)とオプションを確認しましょう。

予約状況の確認手順とステータスの読み解き方

現在シャットダウンが予約されているかどうかを確認するには、systemd 250以降の環境(Ubuntu 22.04以降など)であれば shutdown --show コマンドを実行します。

# 予約状態の確認
shutdown --show

予約がある場合は予定時刻が表示され、予約がない場合は No scheduled shutdown. と出力されます。

もし古い環境やシェルスクリプト内で判定したい場合は、予約中に一時生成される設定ファイル /run/systemd/shutdown/scheduled の中身を確認します。

# 予約管理ファイルの内容を表示
cat /run/systemd/shutdown/scheduled
# 出力例
USEC=1789311600000000
WARN_WALL=1
MODE=reboot
  • USEC : シャットダウンが実行されるエポック秒(マイクロ秒単位)。1000000 で割って date コマンドに渡すと日本時間に変換できます。
  • WARN_WALL : 1 の場合、定期的にwall通知が全ユーザーへ送信されます。
  • MODE : 動作モード(poweroff は電源断、reboot は再起動)。

停止5分前に発動する「新規ログイン制限(/run/nologin)」

シャットダウン予定時刻の 5分前 になると、Linuxシステムは自動的に /run/nologin というファイルを生成します。

このファイルが存在している間、PAM認証(pam_nologin.so)により 一般ユーザーの新規SSHログインやコンソールログインがすべて拒否 されます。ユーザーのログイン画面には「System is going down」という案内が表示されます。

これは、停止の直前に一般ユーザーがログインして新たなファイル編集や重いバッチ処理を走らせてしまい、ファイル破損が起きるのを防ぐためのLinux標準の安全機構です。なお、システム保守を行う rootユーザー(UID 0) だけは例外としてログインが許可されます。

もし sudo shutdown -c で予約をキャンセルすれば、/run/nologin も自動的に即時削除され、一般ユーザーの通常ログインが再開されます。

実務現場での注意点とトラブルシューティング

日常業務でシャットダウンや再起動を行う際、インフラエンジニアが最も警戒すべきトラブルと安全対策をまとめました。

SSHリモート接続時の切断タイミングと安全対策

リモートのVPS(仮想専用サーバー)やクラウド環境(AWS EC2、GCP等)にSSH接続して作業している場合、インフラ現場で最も恐れられているのが 「再起動するつもりでうっかり shutdown -h now を打ってしまう事故」 です。

電源が切れてしまうため、当然ながらSSH接続は切断され、以降はリモートからログインできなくなります。物理サーバーであれば深夜にデータセンターへ駆けつけることになり、クラウド環境でもWeb管理コンソールを開いて手動起動ボタンを押すまでシステムは停止したままになります。

リモート環境を操作する際は、以下の安全対策を徹底してください。

  1. 鉄則: 再起動時は必ず -r(reboot)を意識して打つ
    「停止(-h)」と「再起動(-r)」のキー入力を指先で混同しないよう、画面のコマンドを2度見直してから実行します。
  2. 1分猶予(+1)を活用して心のゆとりを持つ
    即時(now)ではなく sudo shutdown -r +1 とすることで、コマンド受付のメッセージを確認してからログアウトできます。万が一「あ、打ち間違えた!」と気づいても、1分以内であれば sudo shutdown -c で取り消しが間に合います。
  3. ローカル端末でSSHポートの復旧を待つワンライナー
    サーバー再起動を指示した後、「いつ復帰するのか」を手動で何度も ssh 接続して試すのは手間がかかります。手元のPC端末(MacやLinux)で以下の監視ワンライナーを流しておくと、サーバーが立ち上がった瞬間に自動検知できます。
# SSHポート(22番)の疎通を3秒おきにチェックする監視ワンライナー
until nc -z -w 2 192.0.2.10 22; do echo "再起動待機中..."; sleep 3; done; echo "サーバーが正常に復帰しました!"

なお、個人開発や検証用途で手軽に扱えるクラウド環境を探している方は、初期費用を抑えて手軽にLinuxを動かせる おすすめの格安VPS比較 もぜひ参考にしてみてください。

シャットダウンがフリーズ・ハングアップしたときの原因と強制終了(systemctl poweroff)

shutdown を実行したにもかかわらず、いつまで経っても電源が切れない・再起動しないというトラブルが発生することがあります。

主な原因は以下の3点です。

  • ネットワークストレージ(NFS/CIFS)の応答不能 : アンマウント時にタイムアウト待ちが発生している。
  • 停止処理を拒否するゾンビプロセス : データベースやコンテナサービスがリソース解放を完了できずブロックしている。
  • systemdのサービス終了待機(90秒ルール) : systemdは安全のため、サービス終了シグナルを送ってから最大90秒間(DefaultTimeoutStopSec=90s)プロセスの終了を待機します。

通常は90秒待てば強制終了(SIGKILL)に移行してシャットダウンが完了しますが、それでも完全にハングアップしてしまった場合の緊急手段として、systemctl を用いた強制停止コマンドが用意されています。

# 【強制停止】プロセスの正常終了待ちをスキップして電源を切る
sudo systemctl poweroff -f

# 【超強制電源断】ディスクの同期すらスキップして即座にリセット(最終手段)
sudo systemctl poweroff -ff

※-ff オプションはカーネルを瞬時に電源断・再起動させるため、ファイルシステム破損のリスクを伴います。コンソールが完全に無応答になった緊急避難時以外は使用を避けてください。各サービスの停止管理や状態確認の詳細は、systemctlコマンドでのサービス停止・電源管理 で詳しく解説しています。

reboot・poweroff・init 0 コマンドとの違いと使い分け

Linuxには、停止や再起動を行うコマンドが shutdown 以外にも複数存在します。それぞれの内部挙動と実務での使い分けを一覧表で整理しました。

コマンドバックエンドの挙動時間指定(予約)一斉通知(wall)ログイン制限推奨ユースケース
shutdownsystemd-logind 経由で段階的停止対応(+m / hh:mm)自動配信5分前自動遮断【本番最推奨】 複数人利用サーバー、計画メンテナンス、安全なリモート保守
rebootSysVinit互換(実体は systemctl reboot)不可(即時のみ)なしなし個人開発機や検証環境での手動による素早い再起動
poweroffSysVinit互換(実体は systemctl poweroff)不可(即時のみ)なしなし手元のテスト機での手動電源オフ
init 0SysVinitのランレベル0への遷移不可(即時のみ)なしなし古いUNIX/Linux環境(SysVinit)の互換手順
init 6SysVinitのランレベル6への遷移不可(即時のみ)なしなし古いUNIX/Linux環境での再起動互換手順

個人のローカル開発機であれば sudo reboot や sudo poweroff の方がタイピング数が少なく手軽です。

しかし、本番業務のサーバーでは「ログイン遮断機能」「ユーザーへの事前予告機能」「時間指定機能」がすべて揃っている shutdown コマンドを使うのが圧倒的に安全 です。

まとめ: スクリプトでの自動停止にも活用しよう

本記事では、Linuxの shutdown コマンドの使い方と安全な運用手順について解説しました。重要ポイントを振り返りましょう。

  • 即時停止は sudo shutdown -h now、即時再起動は sudo shutdown -r now が鉄則
  • 時間指定は相対時間(+m)と絶対時刻(hh:mm)が利用可能
  • 予約を取り消すときは sudo shutdown -c 一発でOK(全ユーザーへも自動通知)
  • リモートSSH作業では -h と -r の打ち間違いに注意し、1分猶予(+1)を活用する

シェルスクリプトやcronで自動シャットダウンを設定する

深夜の定期メンテナンスや節電対策として、毎週末や夜間に自動でシャットダウン・再起動を実行させたい場合は、cron と組み合わせるのが非常に効果的です。

ただし、バッチ処理やcronで実行する際は、管理者パスワードの入力プロンプトで処理が止まってしまわないよう、visudo を用いて特定ユーザーにパスワードなし実行権限(NOPASSWD)を与えておく必要があります。

# 安全にsudoers設定ファイルを新規作成
sudo visudo -f /etc/sudoers.d/shutdown-users

ファイル内に以下の設定を1行記述します(ユーザー名が batchuser の場合)。

# batchuserにshutdownコマンドのみパスワード不要で実行を許可
batchuser ALL=(ALL) NOPASSWD: /sbin/shutdown

設定が完了したら、crontab -e で毎朝05:00に自動再起動するスケジュールなどを登録できます。

# 毎日午前05:00に自動再起動(crontabの設定例)
0 5 * * * sudo /sbin/shutdown -r +5 "定期自動再起動を実施します"

cronの詳しい書き方や構文設定については、cronの設定方法|crontabの書き方・オプション・実行例を解説 をあわせてチェックしてみてください。

関連記事(内部リンク)

サーバー運用の効率化と安全管理に役立つ関連コマンドの解説記事です。

Bash玄

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

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

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

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

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

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

Bash玄をフォローする

コメント