「カーネルアップデート後に再起動が必要だけど、どのコマンドを使えばいい?」「SSHでリモート接続しているサーバーを再起動しても大丈夫?」——Linuxの再起動操作は頻繁に行う作業でありながら、コマンドの種類や注意点を正確に把握していないと、データ損失や接続断のリスクがあります。
この記事では、reboot・shutdown・systemctlを使った再起動コマンドの基本から、自動再起動の設定・SSHからの安全な再起動・トラブルシューティングまで体系的に解説します。
Linuxで再起動する目的

システム更新後の再起動
Linuxでは多くの設定変更やソフトウェア更新がサービス再起動だけで反映されますが、以下の場合はOSの再起動が必要です。
- カーネルのアップデート: 新しいカーネルは再起動しないと適用されない
- glibcなどのコアライブラリの更新: 多くのプロセスが依存するため再起動が必要
- システム全体のパッケージ更新(
apt upgrade等): 再起動が推奨されるケースがある
# カーネル更新後に再起動が必要かどうかを確認(Ubuntu/Debian系)
ls /run/reboot-required 2>/dev/null && echo "再起動が必要です" || echo "再起動不要"
トラブルやフリーズ時のリブート
プロセスのデッドロック・メモリリーク・サービスの応答停止など、通常の操作で回復できない状態になった場合に再起動で問題を解消します。ただし本番環境では再起動前に原因の調査と記録を残すことが重要です。
設定変更適用のための再起動
ネットワーク設定・ファイルシステムのマウントオプション・カーネルパラメーター(/etc/sysctl.conf)など、再起動しないと反映されない設定変更があります。設定ファイルを変更した後に意図通り動作させるために再起動を行います。
基本的な再起動コマンド

rebootコマンドの使い方
単純に再起動する方法
rebootは最もシンプルな再起動コマンドです。実行すると即座にシステムの再起動プロセスが開始されます。
# 即時再起動(root権限が必要)
reboot
# sudoで実行する場合
sudo reboot
# 実行後の出力例
# Connection to 192.168.1.10 closed by remote host.
# Connection to 192.168.1.10 closed.
📌 この記事の手順はUbuntu 20.04/22.04・CentOS 7/8・RHEL系のsystemd環境を対象としています。
オプション指定による遅延再起動
# 主なrebootオプション
reboot --halt # シャットダウンのみ(電源は切れない)
reboot --poweroff # シャットダウン後に電源をオフ
reboot --force # 強制再起動(ファイルシステムのアンマウントをスキップ)
reboot --wtmp-only # 実際には再起動せず、wtmpログのみ更新
reboot –forceはファイルシステムのアンマウントやサービスの正常停止をスキップします。データの整合性が保証されないため、通常は使用しないでください。
shutdownコマンドを使った再起動
shutdown -r now で即時再起動
shutdownコマンドは再起動・シャットダウンの両方に対応し、時間指定やメッセージ通知が可能です。
# 即時再起動
sudo shutdown -r now
# -r:reboot(再起動)を意味するオプション
# now:即時実行を意味するキーワード
特定時間での再起動設定
# 5分後に再起動
sudo shutdown -r 5
# 絶対時間で再起動(深夜2時に実行)
sudo shutdown -r 02:00
# 特定分数後に再起動(+で相対時間指定)
sudo shutdown -r +10 # 10分後
# 予定した再起動のキャンセル
sudo shutdown -c
警告メッセージを送信して再起動する方法
複数のユーザーが使っているサーバーでは、再起動前に接続中のユーザーに通知メッセージを送れます。
# メッセージ付きで10分後に再起動
sudo shutdown -r +10 "システムメンテナンスのため10分後に再起動します"
# 接続中のユーザー全員にwallコマンドでメッセージを送る
sudo wall "【緊急通知】5分後にサーバーを再起動します。作業を保存してください。"
# shutdown実行時のメッセージは/run/nologinに記録される
shutdownコマンドの詳しいオプション一覧と使い方はこちらの記事も参考になります。
systemctlコマンドを使った再起動(systemd環境)
systemctl reboot の基本
Ubuntu 16.04以降・CentOS 7以降などsystemdを採用している環境ではsystemctl rebootが推奨される再起動コマンドです。
# systemdを使った再起動
sudo systemctl reboot
# シャットダウン(電源オフ)
sudo systemctl poweroff
# 強制再起動(応答しない場合)
sudo systemctl reboot --force
# 現在のsystemdの状態を確認
systemctl status
タイマーや条件付き再起動の使い方
# systemdタイマーを使った定期再起動の設定例
# /etc/systemd/system/reboot.timer を作成
[Unit]
Description=Weekly Server Reboot
[Timer]
OnCalendar=Sun 03:00:00 # 毎週日曜日の深夜3時
Persistent=true
[Install]
WantedBy=timers.target
# タイマーを有効化・開始
sudo systemctl enable reboot.timer
sudo systemctl start reboot.timer
# タイマーの状態確認
systemctl list-timers --all | grep reboot
| コマンド | 動作 | 履歴ログ | 推奨度 |
|---|---|---|---|
reboot |
即時再起動 | あり | ◎ |
shutdown -r now |
即時再起動(時間・メッセージ指定可) | あり | ◎ |
systemctl reboot |
systemd経由で再起動 | あり | ◎ |
reboot --force |
強制再起動(アンマウントなし) | なし | △(緊急時のみ) |
再起動コマンドの応用

特定ユーザーのみ再起動権限を付与する
通常、再起動コマンドはroot権限が必要です。特定のユーザーにsudoで再起動のみを許可する設定を/etc/sudoersで行えます。
# visudoコマンドでsudoersを安全に編集
sudo visudo
# 以下の行を追加(deployer ユーザーに reboot のみ許可)
deployer ALL=(ALL) NOPASSWD: /sbin/reboot
deployer ALL=(ALL) NOPASSWD: /sbin/shutdown
注意: sudoersの編集は必ずvisudoコマンドを使ってください。直接編集してシンタックスエラーが起きると、sudoが使えなくなる場合があります。
# 設定後の動作確認(deployerユーザーで実行)
sudo reboot # パスワードなしで実行できることを確認
スクリプト内で自動再起動を行う方法
パッケージ更新後やデプロイ処理後に自動で再起動が必要なスクリプトの実装例です。シェルスクリプトでの自動再起動の実装方法はこちらの記事も参考になります。
#!/bin/bash
# update_and_reboot.sh
set -e # エラー時に停止
echo "=== システム更新を開始します ==="
# パッケージ更新
sudo apt update && sudo apt upgrade -y
# 再起動が必要かどうかを確認
if [ -f /run/reboot-required ]; then
echo "カーネル更新が適用されました。60秒後に再起動します。"
# 重要サービスの停止
sudo systemctl stop nginx
sudo systemctl stop mysql
# データのフラッシュ
sync
# ログに記録
echo "$(date): システム更新による再起動" >> /var/log/reboot.log
# 60秒後に再起動
sudo shutdown -r +1 "システム更新による自動再起動"
else
echo "再起動不要です。更新完了。"
fi
cronジョブで定期的に再起動する設定
週次・月次の定期メンテナンスとして自動再起動を設定する方法です。
# crontabを編集(rootのcrontabを編集する場合)
sudo crontab -e
# 毎週日曜日の深夜3時に再起動
0 3 * * 0 /sbin/shutdown -r now >> /var/log/cron-reboot.log 2>&1
# 毎月1日の深夜2時に再起動
0 2 1 * * /sbin/shutdown -r now >> /var/log/cron-reboot.log 2>&1
# crontabの書式
# 分 時 日 月 曜日 コマンド
# 曜日: 0=日曜, 1=月曜 ... 7=日曜
# 設定確認
sudo crontab -l
# cronサービスの状態確認
systemctl status cron # Ubuntu/Debian
systemctl status crond # CentOS/RHEL
リモート接続からの再起動(SSH利用)
SSHセッションから再起動コマンドを実行すると、SSH接続は切断されます。再起動後にサーバーが正常に起動しているかを確認するための手順が重要です。
# SSHから安全に再起動する方法
# 再起動後に再接続できるかどうかを確認してから実行する
# 1. 現在の接続を確認
who # 他のユーザーが接続していないか確認
w # ユーザーの作業状況を確認
# 2. 重要プロセスの確認
ps aux | grep -E "mysql|nginx|apache" | grep -v grep
# 3. 再起動実行(nohupで接続切断後も処理が継続)
sudo shutdown -r +1 "メンテナンスのため再起動します"
# 4. ローカルからSSHで再接続を試みる(再起動後)
ssh [email protected]
# 5. サービスが正常に起動しているか確認
systemctl status nginx
systemctl status mysql
本番サーバーをSSHから再起動する場合は、再起動後に自動でサービスが起動するよう事前にsystemctl enableで設定されているかを確認してください。
再起動前の注意点

作業中のデータやサービスを保存・停止する
再起動前に実行中の重要プロセスとデータを確認・保存します。shutdownコマンドを使った安全なサービス停止手順はこちらの記事も参考になります。
# 実行中のプロセスを確認
ps aux --sort=-%cpu | head -20
# 書き込みが完了していないデータをディスクに書き出す
sync
# データベースサービスを安全に停止
sudo systemctl stop mysql
sudo systemctl stop postgresql
# Webサーバーを停止
sudo systemctl stop nginx
sudo systemctl stop apache2
# 重要なログをフラッシュ
sudo journalctl --flush
# ディスクへの書き込み完了を確認
sync && echo "ディスク書き込み完了"
他ユーザーへの通知方法
# 現在接続しているユーザーを確認
who
w
# wallコマンドで全ユーザーにメッセージを送信
sudo wall "【重要】15分後にサーバーを再起動します。作業を保存してください。"
# shutdownの警告メッセージ機能を使う
sudo shutdown -r +15 "定期メンテナンスのため15分後に再起動します"
# shutdownキャンセル(予定を取り消す場合)
sudo shutdown -c "再起動をキャンセルしました"
重要プロセスやサービスの確認
# 実行中のsystemdサービスを一覧表示
systemctl list-units --type=service --state=running
# 特定のサービスが動いているか確認
systemctl is-active nginx mysql postgresql
# ポートのリスニング状況を確認(サービスが動いているポートを把握)
sudo ss -tlnp
# または
sudo netstat -tlnp
# 未保存のファイルシステムの書き込みを確認
lsof | grep -i "deleted" | grep -v "^COMMAND"
再起動後のログインやサービス起動確認
# 再起動後の確認手順
# 1. システムの起動時間を確認
uptime
who -b # 最後の起動時刻
# 2. 起動時のエラーログを確認
sudo journalctl -b -p err # 今回の起動のエラーのみ表示
sudo journalctl -b --since "10 minutes ago"
# 3. 各サービスの状態確認
systemctl status nginx
systemctl status mysql
systemctl status sshd
# 4. 起動に失敗したサービスを一覧表示
systemctl --failed
# 5. ディスクのマウント状態確認
df -h
mount | grep -v tmpfs
再起動コマンドに関するトラブルシューティング
権限不足で再起動できない場合の対処
再起動コマンドがエラーになる場合の確認と対処法です。Linuxの再起動コマンドの権限設定と対処法はこちらの記事も参考になります。
# エラー例
# reboot: Need to be root
# sudo: reboot: command not found
# 確認1:現在のユーザーとグループを確認
id
whoami
# 確認2:sudoの設定を確認
sudo -l # 実行可能なsudoコマンドを表示
# 対処1:sudoを付けて実行
sudo reboot
# 対処2:rootに切り替えてから実行
su -
reboot
# 対処3:shutdownコマンドのパスを確認
which shutdown
which reboot
ls -la /sbin/shutdown /usr/sbin/shutdown 2>/dev/null
# 対処4:sudoersにrebootの権限を追加(管理者が設定)
sudo visudo
# 以下を追加: username ALL=(ALL) NOPASSWD: /sbin/reboot
再起動が途中で止まる場合の確認ポイント
# 再起動が完了しない場合の確認手順
# 1. 停止しているサービスを特定(別の端末やコンソールで確認)
sudo journalctl -f # リアルタイムログを確認
# 2. タイムアウトするサービスを確認
sudo journalctl -b -1 | grep "Timeout\|Failed\|A stop job"
# 3. 特定サービスのstopタイムアウトを調整
# /etc/systemd/system/myservice.service に追加
# [Service]
# TimeoutStopSec=10s
# 4. systemdのデフォルトタイムアウト確認
cat /etc/systemd/system.conf | grep DefaultTimeoutStop
# 5. 強制終了が必要な場合(最終手段)
sudo systemctl kill --kill-who=all myservice.service
sudo systemctl reboot --force
対処Tips: 再起動が止まる原因の多くは特定サービスの停止タイムアウトです。journalctl -b -1で前回の起動ログを確認し、どのサービスで止まったかを特定してから対処しましょう。
リモート接続が切れた後の復旧方法
# SSH接続が再起動後に復帰しない場合の確認と対処
# 1. サーバーが起動しているかPingで確認
ping -c 4 192.168.1.10
# 2. SSHポートが開いているか確認
nc -zv 192.168.1.10 22
# または
nmap -p 22 192.168.1.10
# 3. SSH接続のデバッグ情報を表示して確認
ssh -vvv [email protected]
# 4. sshdが起動しているかVPSコンソールから確認
systemctl status sshd
# sshdが停止している場合は起動
sudo systemctl start sshd
sudo systemctl enable sshd
# 5. ファイアウォールがSSHをブロックしていないか確認
sudo ufw status # Ubuntu
sudo firewall-cmd --list-all # CentOS/RHEL
# 6. /etc/hosts.allowで接続が許可されているか確認
cat /etc/hosts.allow
cat /etc/hosts.deny
まとめ
Linuxでの再起動はreboot、shutdown、systemctlで可能
Linuxの再起動コマンドは用途に応じて使い分けることが重要です。
| コマンド | 特徴 | おすすめの場面 |
|---|---|---|
sudo reboot |
シンプルで素早い即時再起動 | 一人で作業している開発・テスト環境 |
sudo shutdown -r +N "メッセージ" |
時間指定・通知メッセージ付き | 複数ユーザーが使う共有サーバー |
sudo systemctl reboot |
systemd経由の正式な再起動 | systemd環境での推奨手順 |
sudo reboot --force |
強制再起動(アンマウントなし) | フリーズ時の緊急対応のみ |
事前にデータやサービスの確認・保存が重要
- 再起動前に
who・wコマンドで接続中のユーザーを確認する syncコマンドでディスクへの書き込みを完了させる- データベース・Webサーバーなど重要サービスを正常停止してから再起動する
- 再起動後に
systemctl --failedで起動失敗したサービスを確認する - 本番サーバーはVPSコンソールやKVMにアクセスできる状態で再起動する
cronやスクリプトを活用すれば自動再起動も可能
定期的なメンテナンス再起動はcronジョブまたはsystemdタイマーで自動化できます。スクリプト内でサービスの停止・データのフラッシュ・ログの記録を組み合わせることで、安全な自動再起動フローを構築できます。再起動コマンドの基本を正確に理解した上で、環境に合った方法を選ぶことが安全なLinuxサーバー管理の基本です。

