Linuxコマンド一覧

journalctlコマンド|サービスのログを読む

__ __ _ _____
\ \ / /__| |_|_ _|__ _ __ _ __ ___
\ \ /\ / / _ \ '_ \| |/ _ \ '__| '_ ` _ \
\ V V / __/ |_) | | __/ | | | | | |
\_/\_/ \___|_.__/|_|\___|_| |_| |_| |_
 
journalctl を試すためのサンドボックスです。実機のファイルには影響しません。
user@webterm:~/project$
 

journalctl は systemd が集めたログを読むコマンドです。サービスで絞る `-u`、末尾だけ見る `-n`、流れ続けるログを追う `-f` の使い方を、ブラウザ上のターミナルで打ちながら確認できます。

最終更新: 2026-09-07

書式

journalctl [オプション]

systemd が集めたログを新しい順に並べて出します。

まず打ってみる

サービス名で絞るのが基本です。

$ journalctl -u nginx
Mar 23 08:00:01 webterm-server nginx[1001]: Starting A high performance web server and a reverse proxy server...
Mar 23 08:00:02 webterm-server nginx[1001]: nginx/1.18.0
Mar 23 08:00:02 webterm-server nginx[1001]: Started A high performance web server and a reverse proxy server.
Mar 23 09:15:30 webterm-server nginx[1001]: conflicting server name "localhost" on 0.0.0.0:80, ignored
Mar 23 10:30:00 webterm-server nginx[1001]: 1024 worker_connections are enough for most sites

左から、日時・ホスト名・プロセス名とその PID・メッセージです。 systemctl status が要約しか出さないのに対し、こちらは記録そのものが読めます。

末尾だけ見る

ログは長いので、たいてい末尾だけ見れば足ります。

$ journalctl -u nginx -n 2
Mar 23 09:15:30 webterm-server nginx[1001]: conflicting server name "localhost" on 0.0.0.0:80, ignored
Mar 23 10:30:00 webterm-server nginx[1001]: 1024 worker_connections are enough for most sites

-u を付けなければ、全サービスをまとめた記録になります。

$ journalctl -n 5
Mar 23 09:15:30 webterm-server nginx[1001]: conflicting server name "localhost" on 0.0.0.0:80, ignored
Mar 23 09:45:12 webterm-server mysql[1201]: Aborted connection 42 to db: 'myapp' user: 'webapp' host: '10.0.0.5' (Got timeout reading communication packets)
Mar 23 10:00:01 webterm-server cron[501]: (root) CMD (/usr/lib/apt/apt.systemd.daily)
Mar 23 10:30:00 webterm-server nginx[1001]: 1024 worker_connections are enough for most sites
Mar 23 10:30:15 webterm-server sshd[456]: Received disconnect from 192.168.1.10 port 52341:11: disconnected by user

「どのサービスが直前に何をしたか」を横断で見たいときは、この形が速いです。

新しい順に見る

-r を付けると、新しいものが上に来ます。

$ journalctl -u nginx -r
Mar 23 10:30:00 webterm-server nginx[1001]: 1024 worker_connections are enough for most sites
Mar 23 09:15:30 webterm-server nginx[1001]: conflicting server name "localhost" on 0.0.0.0:80, ignored
Mar 23 08:00:02 webterm-server nginx[1001]: Started A high performance web server and a reverse proxy server.
Mar 23 08:00:02 webterm-server nginx[1001]: nginx/1.18.0
Mar 23 08:00:01 webterm-server nginx[1001]: Starting A high performance web server and a reverse proxy server...

探す

キーワードで探すときは grep につなぎます。

$ journalctl | grep Aborted
Mar 23 09:45:12 webterm-server mysql[1201]: Aborted connection 42 to db: 'myapp' user: 'webapp' host: '10.0.0.5' (Got timeout reading communication packets)

どのサービスの話かは、行の中のプロセス名(ここでは mysql[1201])で分かります。 そこまで分かったら、そのサービスに絞って前後を読みます。

$ journalctl -u mysql
Mar 23 08:00:05 webterm-server mysql[1201]: Starting MySQL Community Server...
Mar 23 08:00:08 webterm-server mysql[1201]: InnoDB: Buffer pool(s) load completed at 080008
Mar 23 08:00:09 webterm-server mysql[1201]: Started MySQL Community Server.
Mar 23 09:45:12 webterm-server mysql[1201]: Aborted connection 42 to db: 'myapp' user: 'webapp' host: '10.0.0.5' (Got timeout reading communication packets)

追いかける

-f は、新しい行が出るたびに表示し続けます。

$ journalctl -u nginx -f
Mar 23 08:00:01 webterm-server nginx[1001]: Starting A high performance web server and a reverse proxy server...
Mar 23 08:00:02 webterm-server nginx[1001]: nginx/1.18.0
Mar 23 08:00:02 webterm-server nginx[1001]: Started A high performance web server and a reverse proxy server.
Mar 23 09:15:30 webterm-server nginx[1001]: conflicting server name "localhost" on 0.0.0.0:80, ignored
Mar 23 10:30:00 webterm-server nginx[1001]: 1024 worker_connections are enough for most sites

実機ではここで待ち状態になり、新しい行が出るたびに追加されます。 別の画面から操作を行い、その結果をこちらで見る、という使い方をします。 終わるときは Ctrl+C です。

実務での使いどころ

journalctl は、サービスが期待どおりに動かない理由を読むときに打つコマンドです。

場面打ち方
起動に失敗した理由を読むjournalctl -u nginx -n 50
デプロイ中の様子を見るjournalctl -u myapp -f
直前に何が起きたかを横断で見るjournalctl -n 20
キーワードで探すjournalctl | grep Aborted
新しい順に読むjournalctl -u nginx -r

systemctl status で状態を見て、journalctl -u で理由を読む。 この順番がサーバー調査の型です。

つまずきやすいところ

-u のサービス名は systemctl と同じです。 nginxnginx.service はどちらでも通ります。 名前が違うと、記録が無いと言われます。

$ journalctl -u nosuchservice
-- No entries --

古いログは消えていることがあります。 journal には保存の上限があり、超えた分から消えます。 「昨日のログが無い」ときは、消えたのか出ていないのかを分けて考えてください。

長いときはページャや grep と組みます。 そのまま打つと画面が流れます。 -n で件数を切る、grep で絞る、less に渡す、のどれかを最初から付けるのが楽です。

手を動かして覚える

webterm.appこのサイト

learn.webterm.app別のサイト

>_WEBTERM LEARN

WebTerm Learn|1つのコマンドから、使える状態へ

コマンドは単体で覚えるより、実際の作業の流れの中で使うほうが身につきます。順番に積み上げていくコースがあります。

コースを見る

関連するコマンド

systemctl / grep / tail / less

よくある質問

ログファイルを直接読むのと何が違いますか?
systemd を使うシステムでは、各サービスの出力が journal という共通の置き場にまとまっています。`/var/log` にファイルが無くても、journalctl なら読めます。
特定のサービスだけ見るには?
`journalctl -u nginx` です。`-u` はユニット(サービス)の指定で、`.service` は省略できます。
-f は何をしますか?
新しい行が出るたびに表示し続けます(実機では Ctrl+C で終了)。デプロイ直後やリクエストを送るときに、横で開いておく使い方をします。
journalctl と systemctl status はどう使い分けますか?
`systemctl status` は状態の要約、`journalctl -u` はログ本体です。動いていない理由を知りたいときは journalctl 側を読みます。
sudo は必要ですか?
実機では、他のユーザーのログやシステム全体のログを読むために必要になることがあります。自分のサービスのログだけなら不要な場合もあります。