【Linux】時刻の確認 (date) と設定・同期 (timedatectl) |起動時間 (uptime) も確認

【Linux】時刻の確認 (date) と設定・同期 (timedatectl) |起動時間 (uptime) も確認 Linux

「あれ…?ログファイルのタイムスタンプがずれてる!障害の原因が追えない!」 「バッチ処理が指定した時間に動かない!なんで!?」 「セキュリティ認証がエラーになるんだけど、もしかして時刻が狂ってる…?

 

Linuxシステムを管理していると、そんな「時刻のズレ」問題に直面して、もうパニックになっちゃいそう…!そんな状態で、慌てて「linux 時間確認」とか「linux 時刻設定」なんて検索して、このページにたどり着いてくれたんじゃないでしょうか。

 

わかります、わかります!私も全く同じ経験があります。 システムの動作が不安定になったり、最悪の場合、データ整合性が取れなくなったり…「もしかして、システム壊れた…?」「原因不明のトラブルだ…」って、もう冷や汗が出ちゃいますよね😥

 

でも、大丈夫です!

その焦る気持ち、よーくわかります。でも、慌てるのはまだ早いですよ!

これらの時刻ズレ問題の多くは、Linuxの時刻管理の仕組みをちゃんと理解して、適切な設定(特にNTPによる時刻同期)を行えば、しっかり解決できるんです。

 

この記事は、そんな「Linuxの時刻が合わない!」地獄に陥ってしまったあなたを救うための、安全な対処法をステップバイステップで徹底的に解説する「完全ガイド」です✨

 

「linux 時間確認」の基本である date コマンドの使い方(「linux date フォーマット」も徹底解説します!)から、timedatectl コマンドを使った最新の「linux 時刻設定」や「linux 時刻同期」の方法、さらにはシステムの「linux 起動時間 確認」(uptime)に至るまで。

 

私と一緒に、一つずつ冷静に確認していきましょうね😇

 

 

スポンサーリンク
スポンサーリンク
目次(気になるところをクリック)
  1. Linuxにおける時刻管理の基本:2つのクロック  
    1. システムクロック (System Clock) とは?  
    2. ハードウェアクロック (Hardware Clock / RTC) とは?  
    3. 2つのクロックの関係性と同期の重要性  
  2. 1. Linuxで現在の時刻・日付を確認する方法 (date)  
    1. 最も基本的な date コマンドの使い方  
    2. 【徹底解説】date コマンドのフォーマット指定(linux date フォーマット)  
    3. 実践的! date フォーマットの活用例  
  3. 2. Linuxの時刻・日付を手動で設定・変更する (date / timedatectl)  
    1. なぜ手動設定が必要か?(注意点)  
    2. (従来の方法) date コマンドによる時刻設定  
    3. (推奨) timedatectl コマンドによる時刻設定  
  4. 3. (最重要) Linuxの時刻を自動で同期する方法 (timedatectl / ntp)  
    1. なぜ時刻同期 (NTP) が不可欠なのか?  
    2. 現代の標準:systemd-timesyncd (timedatectl)  
    3. タイムゾーンの設定と確認  
  5. 4. 高度な時刻同期:NTPの仕組みと chrony の活用  
    1. NTP (Network Time Protocol) の仕組みとは?  
    2. ntpd / ntpdate から chrony / systemd-timesyncd への移行  
    3. chrony の設定と管理  
    4. 表2: Linux時刻同期サービスの比較  
  6. 5. Linuxの起動時間(稼働時間)を確認する方法  
    1. uptime コマンドによる確認  
    2. ロードアベレージとは何か?  
    3. uptime -s (since) による起動日時の確認  
    4. w コマンドや who コマンドとの違い  
    5. last コマンドによる再起動履歴の確認  
  7. Linux時刻管理のトラブルシューティング  
    1. ケース1:時刻が徐々にずれていく  
    2. ケース2:時刻が数時間(例:ちょうど9時間)ずれている  
    3. ケース3:NTP同期が失敗する (System clock synchronized: no)  
    4. ケース4:再起動すると時刻がリセットされる(大幅にずれる)  
    5. ログの確認方法 (journalctl)  
  8. まとめ  

Linuxにおける時刻管理の基本:2つのクロック  

Linuxの時刻管理をちゃんと理解するには、まず「2種類の時計」が動いているってことを知っておく必要があるんです。

 

え?2種類?って思うかもしれませんが、この2つの時計の役割と関係性を知っておくことが、時刻ズレトラブルを解決するための、とっても大事な第一歩になるんですよ!

 

システムクロック (System Clock) とは?  

システムクロックっていうのは、Linuxカーネルが管理している「メモリ上の時計」のことです。

 

OSが動いている間、「今、何時何分かな?」って認識するために使われるメインの時計で、私たちが date コマンドで確認しているのは、まさにこのシステムクロックの時刻なんですね。

 

この時計は、OSが起動している間だけ動作(カウントアップ)する、っていう特徴があります。

 

ハードウェアクロック (Hardware Clock / RTC) とは?  

ハードウェアクロックっていうのは、マザーボード上に搭載されているRTC(Real-Time Clock)チップが管理する「物理的な時計」です。

 

こっちは物理的な部品なので、システムの電源がオフになっている間も、マザーボード上のCMOSバッテリーっていう小さな電池の力で、ずーっと動き続けてくれるんです。

 

ハードウェアクロックの主な役割は、OSが起動する時に「現在の時刻」をシステムクロックに教えてあげる(設定してあげる)ことなんですよ。 この時計は hwclock コマンド(または timedatectl 経由)で操作することができます。

 

2つのクロックの関係性と同期の重要性  

Linuxシステムの時刻は、だいたい以下のような流れで管理されています。

 

  1. システム起動時: まず、物理的な時計であるハードウェアクロック (RTC) の時刻を読み込みます。そして、それを基にメモリ上のシステムクロックを設定します。
  2. システム稼働中: OSはシステムクロックをメインに使います。もしNTPによる時刻同期が有効になっていると、システムクロックはインターネット上の正確な時刻と定期的に同期されて、ズレが補正され続けます。
  3. システム終了時: (ディストリビューションや設定にもよりますが) NTPで正確になったシステムクロックの時刻を、今度はハードウェアクロック (RTC) に書き戻してあげます。

 

この連携がうまくいかないと、「起動するたびに時刻がずれる」「NTPで同期しても再起動すると元に戻っちゃう」みたいな、イライラする問題が発生しちゃうんです😫

 

でも、大丈夫です! 現代のLinux(systemd が主流のもの)では、これらの面倒な管理を timedatectl コマンドが自動的に、いい感じにやってくれるので、管理者が2つの時計を強く意識しなきゃいけない場面は、ずいぶん減ってるんですよ。

 

 

スポンサーリンク

1. Linuxで現在の時刻・日付を確認する方法 (date)  

Linuxで現在の時刻や日付を確認する(「linux 時間確認」や「linux 現在時刻」)ための、最も基本的で、かつ強力なコマンドが date です。

 

最も基本的な date コマンドの使い方  

ターミナルで、もう単純に date と入力して実行するのが、一番カンタンな使い方ですよね。

 

 $ date 2025年 11月 13日 木曜日 02:30:45 JST 

 

この出力には、年月日、曜日、現在の時刻、そしてタイムゾーン(この場合は JST: 日本標準時)が、ぜんぶ含まれています。

 

デフォルトの表示形式は、システムの「ロケール」(言語や地域設定)によって、日本語だったり英語だったり、異なる場合があるんですよ。

 

あと、-u オプションを付けると、UTC(協定世界時)での現在時刻を表示できます。 システム内部のログやグローバルなサービスなんかでは、このUTCが基準(世界共通の時間)となることがすっごく多いので、覚えておくとめちゃくちゃ便利です!

 

 $ date -u 2025年 11月 12日 水曜日 17:30:45 UTC 

 

(JSTはUTC+9時間なので、上の例では、ちゃんと9時間前の時刻が表示されていますね!)

 

【徹底解説】date コマンドのフォーマット指定(linux date フォーマット)  

date コマンドの真価は、なんといっても出力フォーマットを自由自在にカスタマイズできる点にあります!(「linux date フォーマット」のキモですね)

 

これは、+ に続けて、フォーマット指定子(%Y とか %m みたいな記号)を記述することで実現できるんです。

 

例えば、「YYYY-MM-DD HH:MM:SS」っていう、プログラムとかで扱いやすい国際標準(ISO 8601)に近い形式で表示したいなーって思ったら、以下のように実行します。

 

 $ date '+%Y-%m-%d %H:%M:%S' 2025-11-13 02:30:45 

 

このフォーマット指定は、シェルスクリプトを作ったり、ログファイルに出力したり、機械的に日時を処理するような場面では、もう本当に本当に重要なんです!

 

よく使われる主要なフォーマット指定子を、以下の表にまとめておきますね!

 

表1: date コマンド 主要フォーマット指定子一覧

指定子 説明 例 (2025年11月13日 02:30:45 の場合)
%Y 年 (西暦4桁) 2025
%y 年 (西暦下2桁, 00-99) 25
%m 月 (2桁, 01-12) 11
%d 日 (2桁, 01-31) 13
%H 時 (24時間表記, 2桁, 00-23) 02
%I 時 (12時間表記, 2桁, 01-12) 02
%M 分 (2桁, 00-59) 30
%S 秒 (2桁, 00-60) ※うるう秒対応 45
%F %Y-%m-%d と同義 (ISO 8601形式の日付) 2025-11-13
%T %H:%M:%S と同義 (24時間表記の時刻) 02:30:45
%s UNIX時間 (1970-01-01 00:00:00 UTCからの経過秒数) (例: 1762987845)
%A 曜日のフルネーム (ロケール依存) Thursday (または 木曜日)
%a 曜日の省略形 (ロケール依存) Thu (または 木)
%Z タイムゾーンの省略形 JST
%z タイムゾーンのオフセット (例: +0900) +0900

 

特に %s (UNIX時間) は、システム間で時刻を数値として(タイムゾーンを気にせず)扱う場合に、もうめちゃくちゃ重要ですよ!

 

実践的! date フォーマットの活用例  

date のフォーマット指定は、単に表示を変えるだけじゃなくて、ファイル名やログメッセージに「今の日時」を埋め込むために、すっごく広く使われます。

 

▼例1: 日時をファイル名に含めたバックアップファイルを作成する $(...) っていう構文(コマンド置換)と組み合わせるのが定番テクニックですね。

 

例: backup_20251113_023045.tar.gz というファイル名を作成
$ tar -czvf backup_$(date +%Y%m%d_%H%M%S).tar.gz /var/www/html 

 

▼例2: スクリプトのログ出力にタイムスタンプを付与する

 

スクリプト内で実行
$ echo "[$(date '+%Y-%m-%d %T')] 処理を開始しました。" >> /var/log/my_batch.log 

 

▼例3: 過去や未来の日付を表示する (-d オプション) date コマンドは -d (または --date) オプションを使うことで、「今」以外の時刻を基準にフォーマット表示させることもできるんです!これがまた便利で…。

 

昨日の日付
$ date -d '1 day ago' +%F 2025-11-12

明日の日付
$ date -d 'tomorrow' +%F 2025-11-14

1時間後
$ date -d '1 hour' +%T 03:30:45

特定の日付のUNIX時間を取得
$ date -d '2025-01-01 00:00:00' +%s 1735689600 

 

こんな風に、date コマンドは「linux 時間確認」だけじゃなくて、日付や時刻を使った高度な処理の、まさに基盤となるコマンドなんですよ💪

 

 

スポンサーリンク

2. Linuxの時刻・日付を手動で設定・変更する (date / timedatectl)  

(関連キーワード: linux 時刻設定, linux 日付 変更

 

次に、Linuxのシステム時刻を、もし手動で設定・変更したい!っていう時の方法を解説しますね。

 

なぜ手動設定が必要か?(注意点)  

⚠️ちょっと待って!まず大事な注意点です!⚠️

まず大前提として、今のサーバー管理において、時刻の手動設定は、原則として非推奨です!

インターネットに繋がってるサーバーなら、絶対に後で説明するNTP(時刻同期)を有効にするべきなんです。

もしNTPが有効な状態で時刻を手動設定しちゃうと、NTPクライアントが次に同期したタイミングで、せっかく設定した時刻が自動的に上書きされちゃうんですよ…!😥

 

じゃあ、どんな時に手動設定が必要になるかっていうと、本当に限定的なケースだけです。

 

  • インターネットに接続されていない、完全にオフライン(クローズド)な環境で動かしてるサーバー。
  • 仮想マシンが起動した時に、なぜか時刻がすっごく(何日も)ずれちゃってて、NTP同期がうまく失敗しちゃう時の一時的な修正として。
  • 時刻のズレをわざと発生させてテストしたい時、とか。

 

(従来の方法) date コマンドによる時刻設定  

昔からある伝統的な方法として、date コマンドは時刻の「設定」にも使われてきました(-s または --set オプションを使います)。

 

これを使うには、もちろん root 権限(sudo)が必要ですよ。

 

"YYYY-MM-DD HH:MM:SS" の形式で設定
$ sudo date -s "2025-11-13 03:00:00" 

 

ただ、このコマンドって「システムクロック」(メモリ上の時計)しか変更してくれないんです。

 

だから、この変更を永続化(再起動後も反映)させるには、変更したシステムクロックの時刻を、わざわざ「ハードウェアクロック (RTC)」(物理的な時計)にも書き込んであげる必要があったんですね。

 

システムクロックの時刻をハードウェアクロックに書き込む
$ sudo hwclock -w 

 

この2段階の操作が必要だったので、date コマンドでの手動設定って、結構めんどくさかったんです…。

 

(推奨) timedatectl コマンドによる時刻設定  

そこで登場するのが、systemd が主流となった現代のディストリビューション(RHEL/CentOS 7以降, Ubuntu 16.04以降など)の標準、timedatectl コマンドです! これを使うのが、はるかにカンタンで安全なんですよ😇

 

timedatectl で時刻を設定する場合、事前にNTP同期を無効化するっていうのが、大事なポイントです。

 

1. NTP同期を無効化
$ sudo timedatectl set-ntp false

2. 時刻を設定 (YYYY-MM-DD HH:MM:SS)
$ sudo timedatectl set-time "2025-11-13 03:00:15" 

 

timedatectl set-time コマンドは、なんとシステムクロックとハードウェアクロックの両方を、一発で適切に更新してくれるんです! だから、さっきの hwclock -w みたいなのを、わざわざ別途実行する必要はありません。すっごく楽ちんですよね!

 

日付だけ、とか、時刻だけ、を変更することもできますよ。

 

日付のみ変更
$ sudo timedatectl set-time "2025-11-14"

時刻のみ変更
$ sudo timedatectl set-time "03:10:00" 

 

作業が終わったら、可能であれば、忘れずにNTP同期を再度有効に戻しておきましょうね!

 

NTP同期を再度有効化
$ sudo timedatectl set-ntp true 

 

 

スポンサーリンク

3. (最重要) Linuxの時刻を自動で同期する方法 (timedatectl / ntp)  

(関連キーワード: linux 時刻同期

 

ここからが、この記事で一番大事なところです! Linuxシステムの時刻を、常に正確に保つための最も重要で、かつ標準的な方法。それが、NTP (Network Time Protocol) による「linux 時刻同期」です。

 

なぜ時刻同期 (NTP) が不可欠なのか?  

システムの時計(システムクロック)って、実はそんなに正確じゃないんです…。 ハードウェアの個体差とか、サーバーが置いてある部屋の温度変化とか、色々な要因で、時間が経つにつれて必ずわずかにズレ(ドリフト)が生じちゃうものなんですよ。

 

このわずかなズレを放置しておくと、もう本当に深刻な問題を引き起こしちゃうんです…!

 

  • ログの不整合: 複数のサーバーで障害調査をしようにも、ログのタイムスタンプがバラバラだったら、もう何がどの順番で起こったのか、追跡がめちゃくちゃ困難になっちゃいますよね😭
  • 認証エラー: Kerberos認証みたいに、時刻の正確さが前提になってるシステムだと、一定以上(例えば5分とか)時刻がズレてるだけで、認証自体が失敗しちゃうんです。
  • データの整合性: 分散データベースとかファイルシステムだと、ノード(サーバー)間の時刻が同期してないと、データの順序がおかしくなったり、最悪の場合、データが壊れちゃう可能性もあります。
  • SSL/TLS証明書: システム時刻が何日もズレてたりすると、SSL証明書の有効期限を間違って判定しちゃって、HTTPS通信が全部失敗する、なんてことも…。
  • ジョブ実行エラー: cron なんかで設定したバッチ処理が、意図しない時刻に実行されたり、逆に実行されなかったりします。

 

ね? 想像しただけで恐ろしいですよね…? これらの問題をぜんぶ回避するために、インターネット上の高精度な「NTPサーバー」(正確な時刻情報を提供してくれる専門のサーバー)と定期的に通信して、自分のシステムの時刻を自動で補正し続けるのが、NTP同期の役割なんです!

 

現代の標準:systemd-timesyncd (timedatectl)  

最新の多くのLinuxディストリビューションでは、systemd-timesyncd っていう、シンプルで優秀なNTPクライアントが最初から組み込まれていて、それを timedatectl コマンドでカンタンに管理できるんです。

 

timedatectl は、時刻同期の管理だけじゃなくて、タイムゾーンの管理とか、手動設定とかを、ぜんぶ一元的に行えるスグレモノなんですよ。

 

1. 現在の状態を確認する (status)

 

まずは、timedatectl (または timedatectl status) を実行して、今の設定状況を確認してみましょう!

 

 $ timedatectl Local time: 木 2025-11-13 02:30:45 JST Universal time: 水 2025-11-12 17:30:45 UTC RTC time: 水 2025-11-12 17:30:45 Time zone: Asia/Tokyo (JST, +0900) System clock synchronized: yes NTP service: active RTC in local TZ: no 

 

この出力で、私たちが確認すべき重要な項目は、以下の3つです!

 

  • Time zone: Asia/Tokyo みたいに、自分が意図したタイムゾーンになってますか?(ここがズレてると、時刻が9時間とか、変な時間ずれちゃいますよ!)
  • System clock synchronized: ちゃんと yes になってますか? もし no だったら、同期が取れてないってことです😥
  • NTP service: ちゃんと active になってますか? もし inactive だったら、NTP同期自体が無効になっちゃってます…。

(※ちなみに RTC in local TZno が推奨です。yes だと、ハードウェアクロックがローカルタイム(JST)で動いちゃってて、特にWindowsとのデュアルブート環境とかじゃなければ、トラブルの原因になることがあるんです。)

 

2. NTP同期の有効化・無効化 (set-ntp)

 

もし、さっきの確認でNTP同期が inactive になっちゃってたら、以下のコマンドで有効化しましょう!

 

 $ sudo timedatectl set-ntp true 

 

逆に、さっきの手動設定をやるために一時的に無効化したい時は false を指定するんでしたよね。

 

 $ sudo timedatectl set-ntp false 

 

ちなみに、systemd-timesyncd がどこのNTPサーバーに同期しに行くかっていう設定は、通常 /etc/systemd/timesyncd.conf っていうファイルに書かれていますよ。

 

タイムゾーンの設定と確認  

「なんか時刻が数時間(ちょうど9時間とか)ズレてるんだけど!?」っていう場合。

 

それ、NTP同期の問題じゃなくて、ほぼ100%「タイムゾーン」の設定ミスが原因です!

 

1. 利用可能なタイムゾーン一覧の表示 timedatectl list-timezones って打つと、設定可能なタイムゾーンの、すっごい膨大なリストが表示されます。

 

 $ timedatectl list-timezones ... Africa/Abidjan America/New_York Asia/Shanghai Asia/Tokyo ... Europe/London ... 

 

こんな時は、grep と組み合わせて絞り込むのが便利ですよ。

 

"Tokyo" を含むタイムゾーンを検索
$ timedatectl list-timezones | grep Tokyo Asia/Tokyo 

 

2. タイムゾーンの変更 set-timezone サブコマンドでタイムゾーンを変更します。 私たちが住んでる日本標準時(JST)にする場合は、Asia/Tokyo を指定すればOKです!

 

タイムゾーンを東京に変更
$ sudo timedatectl set-timezone Asia/Tokyo 

 

変更したら、もう一度 timedatectl status を実行して、Time zoneAsia/Tokyo (JST, +0900) にちゃんとなってるか、しっかり確認してくださいね!

 

 

スポンサーリンク

4. 高度な時刻同期:NTPの仕組みと chrony の活用  

さっき紹介した systemd-timesyncd って、導入もカンタンだし、リソースもあんまり食わないし、すっごく優秀なNTPクライアントなんですけど、機能は結構シンプルなんです。

 

もし、もっともっと高精度な同期が必要だったり、あるいは自分のサーバーを「NTPサーバー」として他のPCに時刻を配信したい!なんていう場合は、chrony っていう、また別のNTPデーモンが使われることが多いんですよ。

 

(ここは、ちょっと上級者向けというか、より深く知りたい人向けのセクションです!💪)

 

NTP (Network Time Protocol) の仕組みとは?  

NTPっていうのは、ネットワーク経由で時刻を同期するためのプロトコルなんですけど、実はただ時刻を問い合わせて、ハイ終わり、っていう単純なものじゃないんです。

 

NTPは「階層構造(Stratum)」っていうのを持ってて、より正確な時刻ソース(源泉)に近いサーバーほど「上位」として扱われる仕組みになってるんですね。

 

  • Stratum 0: 原子時計とか、GPS衛星とか、時刻の「基準」そのものになる物理的なデバイスです。
  • Stratum 1: Stratum 0 (原子時計とか) に直接ケーブルとかで接続されて、時刻情報をゲットするサーバーです。例えば、日本のNICT(情報通信研究機構)さんが運用してるNTPサーバーなんかがこれにあたります。
  • Stratum 2: Stratum 1 のサーバーから時刻同期を行うサーバーです。私たちがよく使わせてもらう、一般的なプロバイダさんとか組織のNTPサーバーが、だいたいこれですね。
  • Stratum 3以下: Stratum 2 のサーバーから同期を行うサーバーです。

 

私たちが普段使ってるPCやサーバーは、だいたい Stratum 2 か Stratum 3 のNTPサーバーに「今何時ですかー?」って接続しに行く、っていうイメージですね。

 

ntpd / ntpdate から chrony / systemd-timesyncd への移行  

ずーっと昔(CentOS 6以前とか)は、ntpd っていうデーモンと、ntpdate っていうコマンド(起動する時に一回だけ同期するやつ)の組み合わせが主流だったんです。

 

でも、ntpd は安定はしてるんだけど同期にちょっと時間がかかったり、ntpdatentpd が動いてると使えなかったり、いくつか使いづらい課題があったんですね。

 

systemd-timesyncd は、それらを置き換える、もっとシンプルな「SNTPクライアント(簡易NTP)」として登場しました。

 

そして、chrony (デーモン名は chronyd) は、ntpd よりも新しいNTP実装で、特に以下の点ですっごく優れてるんです!

 

  • 同期速度が速い: ネットワーク接続が不安定な環境(例えば、ノートPCをスリープさせたり、仮想マシンを一時停止させたり)でも、ntpd よりずっと高速に時刻を同期できるんです。
  • リソース消費が少ない: ntpd よりも軽量なんですよ。
  • 高精度: ntpd と同等か、それ以上の精度を提供してくれます。

 

こういう理由から、RHEL/CentOS 7以降のディストリビューションでは、ntpd の代わりに chrony がデフォルトのNTP実装として採用されてるんですね。

 

chrony の設定と管理  

systemd-timesyncdchrony は、基本的にはどっちか一方しか有効にできません。 chrony をインストールすると、systemd-timesyncd の方は自動的に無効化されることが多いですよ。

 

1. インストールと起動

 

RHEL/CentOS系
$ sudo dnf install chrony

Debian/Ubuntu系
$ sudo apt install chrony 

 

インストールが終わったら、サービスを起動して、PC起動時に自動で動くように「自動起動」も有効にしておきましょう。

 

 $ sudo systemctl start chronyd $ sudo systemctl enable chronyd 

 

2. 設定ファイル (/etc/chrony.conf) 設定ファイルで、どこのNTPサーバーに同期しに行くかを指定します。pool ディレクティブっていうのを使うのが一般的ですね。

 

/etc/chrony.conf の例
(RHEL/CentOS系デフォルト)
pool 2.centos.pool.ntp.org iburst

(日本国内のサーバーを指定する例)
server ntp.nict.jp iburst server ntp.jst.mfeed.ad.jp iburst 

 

iburst っていうオプションは、起動した時に素早く同期を開始するための、推奨オプションです!

 

3. 同期状態の確認 (chronyc) chrony の状態を確認するには、chronyc っていう専用のコマンドを使います。

 

同期先サーバーの状態を確認
$ chronyc sources -v 

 

この出力結果の先頭に ^* っていう印が付いてるサーバーが、今まさに同期対象として選ばれてるサーバーですよ。

 

同期状態の概要
$ chronyc tracking Reference ID : 249.224.99.213 (ntp-b3.nict.go.jp) Stratum : 2 Ref time (UTC) : Wed Nov 12 17:45:30 2025 System time : 0.000000123 seconds slow of NTP time ... 

 

おー! Stratum2 になってて、システムのズレ(System time)も、すっごく小さい(ほぼゼロ)ことがわかりますね!完璧です✨

 

4. 手動での即時同期 chrony は通常、時刻を「じわじわ~」っと合わせる(Slewモード)ことで、システムへの急激な影響を最小限にしてくれるんです。 でも、起動時とかに時刻が、もうとんでもなく(何時間も)ズレちゃってる場合、makestep っていうコマンドで「今すぐ!即座に!」時刻を合わせる(Stepモード)こともできるんです。

 

 $ sudo chronyc makestep 

 

表2: Linux時刻同期サービスの比較  

systemd-timesyncdchrony、そして昔ながらの ntpd の違いを、表にまとめてみました。

 

表2: Linux時刻同期サービスの比較

機能 systemd-timesyncd (timedatectl) chronyd (chrony) ntpd (ntp)
主な用途 クライアント(デスクトップ、サーバー) クライアント / サーバー(高精度) クライアント / サーバー(従来型)
NTPサーバー機能 なし(SNTPクライアントのみ) あり あり
同期速度 高速(システム起動時) 非常に高速(ネットワークの不安定さに強い) 安定(同期までに時間がかかる場合あり)
リソース消費 非常に少ない 少ない 中程度
デフォルト採用 Debian, Ubuntu, Arch Linuxなど RHEL/CentOS 7+, SUSEなど 古いディストリビューション
推奨環境 ほとんどのクライアント、仮想マシン 高精度が求められるサーバー、NTPサーバー構築時 レガシーシステムとの互換性が必要な場合

 

ほとんどの普通のユースケースでは systemd-timesyncd (timedatectl) だけで、もう十分すぎるくらいです。 でも、RHEL/CentOS系を使う場合や、より厳密な時刻管理が求められるサーバーを立てるぞ!っていう時は、chrony の利用が推奨されてるんですね。

 

 

スポンサーリンク

5. Linuxの起動時間(稼働時間)を確認する方法  

(関連キーワード: linux 起動時間 確認

 

時刻の管理と並んで、システム管理者がよーく確認するのが、「このシステム、いつ起動したっけ?」「どれくらいの期間、連続で動いてるんだろ?」っていう情報です。

 

これは、uptime コマンドで、すっごくカンタンに確認できるんですよ(「linux 起動時間 確認」ですね!)。

 

uptime コマンドによる確認  

最も基本的なコマンドが、この uptime です。

 

 $ uptime 02:45:10 up 10 days, 4:15, 1 user, load average: 0.05, 0.10, 0.08 

 

この一行の出力には、4つのすっごく重要な情報が含まれてるんです。

 

  1. 現在時刻: 02:45:10 (今、この時間だよ)
  2. 稼働時間 (up): up 10 days, 4:15 (システムが起動してから、もう10日と4時間15分が経過してるよ)
  3. ログインユーザー数: 1 user (今、1人のユーザーがログインしてるよ)
  4. ロードアベレージ: load average: 0.05, 0.10, 0.08 (システムの負荷状況だよ)

 

ロードアベレージとは何か?  

uptime のオマケみたいについてくる、この「ロードアベレージ」って、実はシステムの負荷状態を示す、めちゃくちゃ大事な指標なんです。

 

これは、過去「1分間」「5分間」「15分間」の平均的な「実行待ちタスク数+実行中タスク数」を示してるんですね。

 

よく「CPU使用率」と混同されちゃうんですけど、厳密にはちょっと違います。

 

  • CPU使用率: CPUが「計算中」である時間の割合(例:CPU 80%使用中)
  • ロードアベレージ: CPUの処理を「待っている」タスクの行列の長さ(例:3つのタスクがCPU待ち)

 

すっごくざっくりした目安ですけど、この値が、ずーっとCPUのコア数を超え続けてるようなら、そのシステムは処理しきれないタスクを抱えちゃってて、高負荷状態(CPUがボトルネックになってる)って判断できるんです。

 

uptime -s (since) による起動日時の確認  

uptime は「どれくらい動いてるか(稼働時間)」を表示してくれましたけど、「じゃあ具体的に、何月何日の何時に起動したの?」っていう、その瞬間を知りたい時もすっごく多いですよね。

 

そんな時は、-s (または --since) オプションを使うんです!

 

 $ uptime -s 2025-11-03 22:30:05 

 

これだけで、YYYY-MM-DD HH:MM:SS 形式で、システムが最後に起動した正確な日時が、一発でわかっちゃうんですよ!便利ですよねー!

 

w コマンドや who コマンドとの違い  

uptime と似たような情報を表示するコマンドとして、wwho があります。

 

w コマンド: w は、uptime の情報(1行目)に加えて、今ログインしているユーザーの一覧と、そのユーザーが「今まさに実行してるプロセス」(WHAT 列)を、もっと詳細に表示してくれます。

 

 $ w 02:50:15 up 10 days, 4:20, 1 user, load average: 0.01, 0.05, 0.07 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT gemini pts/0 192.168.1.100 01:15 0.00s 0.03s 0.00s w 

 

who コマンド: who -b (または who -r) を使うことでも、起動日時を確認できますよ。

 

システムの起動日時を表示
$ who -b system boot 2025-11-03 22:30 

 

last コマンドによる再起動履歴の確認  

「前回の起動はいつだったっけ?」みたいに、過去の起動履歴(再起動の履歴)を確認したいなーって時は、last reboot コマンドを使います。

 

このコマンドは /var/log/wtmp っていうファイル(ログイン履歴がぜんぶ記録されてるファイル)を読み込んで、reboot っていう特別なユーザーのログイン履歴(=つまり、システムの起動)だけを表示してくれるんです。

 

 $ last reboot reboot system boot 5.15.0-88-generi Mon Nov 3 22:30 still running reboot system boot 5.15.0-87-generi Sat Nov 1 09:05 - 22:29 (2+13:24)

wtmp begins Sat Nov 1 09:05:01 2025 

 

これを見ると、今(still running)の起動が Nov 3 22:30 だったこと、その前の起動は Nov 1 09:05 で、Nov 3 22:29 まで動いてた(稼働時間 2日と13時間24分)こと、なんかが分かっちゃうんですね。

 

 

スポンサーリンク

Linux時刻管理のトラブルシューティング  

(ここは、時刻トラブルで本当に困った時のための、ちょっとディープなトラブルシューティングセクションです!🔥)

 

Linuxの時刻管理で発生する問題って、もう、そのほとんどが「NTP同期」か「タイムゾーン設定」の、どっちか(あるいは両方)に原因があるんです。

 

ケース1:時刻が徐々にずれていく  

症状: 時刻を一度手動でバッチリ合わせても、数日経つと、また数秒〜数分ずれてる…。 原因: NTPによる自動時刻同期が有効になっていません! 対処: timedatectl status を確認して、NTP service: active になってない場合は、sudo timedatectl set-ntp true を実行して、NTP同期を今すぐ有効化してください!

 

ケース2:時刻が数時間(例:ちょうど9時間)ずれている  

症状: date で表示される時刻が、実際の時刻と、なぜか数時間単位で(例:日本なのにUTCの時刻が)表示されちゃう。 原因: はい、これはタイムゾーン設定が間違ってます、ほぼ確定です! 日本(JST, UTC+9)のサーバーなのに、設定が UTC (UTC+0) になってたりすると、9時間遅れた時刻が表示されちゃうんですね。 対処: timedatectl statusTime zone を確認してください。日本国内のサーバーだったら、sudo timedatectl set-timezone Asia/Tokyo を実行して、タイムゾーンをビシッと修正しましょう!

 

ケース3:NTP同期が失敗する (System clock synchronized: no)  

症状: timedatectl status を見ても、System clock synchronized: が、いつまで経っても yes にならない…(no のまま)。 原因1: ファイアウォールがNTPポート (UDP 123) をブロックしちゃってる。 対処1: サーバー自身のファイアウォール(firewalld とか ufw とか)や、オフィスのネットワーク経路上のファイアウォール設定を確認して、NTPサーバー(ターゲットは任意)への UDP 123 ポート(アウトバウンド)の通信を許可してあげてください。

 

原因2: NTPサーバーに到達できない(DNSで名前解決ができない、またはNTPサーバー自体がダウンしてる)。 対処2: 設定されてるNTPサーバー(例: ntp.nict.jp)に対して、pingnslookup (または dig) で、ちゃんと名前解決とネットワーク疎通ができるか確認してみてください。 /etc/systemd/timesyncd.conf (timesyncdの場合) や /etc/chrony.conf (chronyの場合) を確認して、別の利用可能なNTPサーバー(例えば time.google.com とか、契約してるプロバイダさんが提供してるNTPサーバーとか)を指定してみるのも手です。

 

原因3: 時刻が、もうとんでもなく(例: 数日以上)ずれすぎている。 対処3: NTPって、あんまりにも時刻がズレすぎていると、逆に自動補正しない(または、補正にすっごい時間がかかる)ように設定されてる場合があるんです。 そういう時は、sudo timedatectl set-ntp false で一度NTPを切ってから、sudo timedatectl set-time "YYYY-MM-DD HH:MM:SS" で、おおよその現在時刻に手動で設定しちゃいます。その上で、再度 sudo timedatectl set-ntp true を実行してみてください。 (もし chrony を使ってるなら、sudo chronyc makestep で強制的に同期を試みるのが早いです!)

 

ケース4:再起動すると時刻がリセットされる(大幅にずれる)  

症状: NTPで同期してて、動いてる間は時刻が合ってるのに、システムを再起動すると、時刻がすっごく(例:数年前とかに)戻っちゃう。 原因: これは、ハードウェアクロック (RTC) が狂ってるか、物理マシンの場合はCMOSバッテリーが切れてる可能性が高いです…。NTPで補正されたシステムクロックの時刻が、シャットダウンする時にハードウェアクロックへ正しく書き戻されてない、っていう可能性もありますね。 対処:

  1. まず、timedatectl statusRTC in local TZ: no になってることを確認します(もし yes だったら、sudo timedatectl set-local-rtc 0 でUTCに設定し直すことを強く推奨します)。
  2. NTPでシステムクロックが完全に同期している(System clock synchronized: yes)状態で、手動でシステムクロックの時刻をハードウェアクロックに書き込んであげます (sudo hwclock -w)。
  3. これが物理マシン(仮想マシンじゃなくて)で頻発する場合は、マザーボードのCMOSバッテリーが消耗しちゃってるのを疑って、交換を検討してみてください。

 

ログの確認方法 (journalctl)  

「NTP同期がなんで失敗してるのか、もっと詳しく知りたい!」っていう時は、journalctl でデーモンのログ(動作記録)を確認するのが、一番確実です。

 

systemd-timesyncd のログ確認:

 

 $ sudo journalctl -u systemd-timesyncd 

 

「Failed to contact …」みたいな、通信失敗のエラーが出てないか、よーく確認してみてください。

 

chrony (chronyd) のログ確認:

 

 $ sudo journalctl -u chronyd 

 

 

スポンサーリンク

まとめ  

Linuxシステムにおける時刻管理って、地味に見えるかもしれないですけど、システムの安定稼働と信頼性を支える、すっごく大事な基盤なんです。

 

この記事で解説してきた大事なポイントを、最後にもう一度おさらいしますね!

 

Linuxの時刻確認: 基本は date コマンドです。「linux 時間確認」だけじゃなくて、date '+%Y-%m-%d %T' みたいな「linux date フォーマット」指定をマスターすると、スクリプト作成とかで、もうめちゃくちゃ役立ちますよ!

 

Linuxの時刻同期 (NTP): 今のサーバーでは「linux 時刻同期」は、もう必須中の必須です! systemd 環境なら timedatectl コマンドを使って、sudo timedatectl set-ntp true でNTP同期を有効にするのが、今の標準です。

 

Linuxの時刻設定(手動): 「linux 時刻設定」や「linux 日付 変更」をもし手動でやるなら、NTPを無効化 (sudo timedatectl set-ntp false) してから sudo timedatectl set-time "..." で行います。 でも、これはオフライン環境とか、本当に限定的な利用に留めておくべき、っていうのを忘れないでくださいね!

 

タイムゾーン: 時刻が数時間単位でズレてる!?ってなったら、まず sudo timedatectl set-timezone Asia/Tokyo みたいに、タイムゾーン設定を真っ先に見直してください。

 

高度な同期: RHEL/CentOS系や、もっと高精度な同期が求められる環境では chrony が使われます。chronyc sources で同期状態を確認します。

 

起動時間の確認: 「linux 起動時間 確認」は uptime コマンド、特に uptime -s(起動日時)がすっごく便利です。 システムの負荷状況(ロードアベレージ)も一緒に確認する癖をつけとくと、イケてる管理者っぽいです!

 

もし、Linuxの時刻がズレて「あれ?」って思ったら、慌てずに、まずは timedatectl status を実行する! そして、「NTP service」が active か、そして「Time zone」が正しいか、っていう2点をしっかり確認することが、問題をすばやく解決するための、最短の近道になりますからね!✨

コメント