0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Linux】プロセス・systemd・ログ管理〜インフラ知識0からAWSデプロイ学習記録〜

0
Last updated at Posted at 2026-05-21

はじめに

この記事はAWSに自作アプリをデプロイするための学習記録です。

筆者の自己紹介

  • 異業種、実務未経験からフルスタックエンジニアを目指して転職活動中
  • 2024年10月から学習を開始、オンラインスクール卒業を経て、現在も学習を継続中

ポートフォリオアプリ:https://github.com/geek-3340/Fameal_app/tree/main

前回の記事:Linuxコマンド基礎〜インフラ知識0からAWSデプロイ学習記録〜

今回の内容

前回はLinuxコマンドの基礎をまとめましたが、今回はその応用編として
本番運用のサーバーで「動いてるアプリの状態を見る」「サービスを起動・停止する」「ログを追ってエラーを調査する」ために必須となる以下3点を学習します

  • プロセスの監視・操作
  • systemdによるサービス管理
  • ログ・エラー管理

学習記録

プロセスについて

プロセスとは、今まさに実行中のプログラムを指す言葉

例えばLinuxシステム全体のプロセスを確認するコマンドps auxを走らせると、バッグラウンドで動き続けているプロセスに加えて、たった今実行したps aux も出力される

Nginxを起動すると、Nginxを動かすプロセスがメモリ上に複数作られ、停止するとそのプロセスは消える

サーバー上では複数のプロセスが同時に動いており、それぞれにPID(プロセスID) という一意の番号が振られている

プロセスの確認

wsl
# 自分が起動したプロセスだけを表示
ps

# システム全体のプロセス一覧(よく使う形)
ps aux

# 上位20件だけ表示
ps aux | head -20

# 特定のプロセスを名前で検索
ps aux | grep nginx

ps auxの出力例

wsl
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.1 167456 11532 ?        Ss   09:00   0:01 /sbin/init
www-data     842  0.0  0.5  62120  5432 ?        S    09:01   0:00 nginx: worker process
user        1024  0.1  1.2 723456 25600 ?        Sl   09:05   0:12 php-fpm: pool www
意味
USER プロセスを起動したユーザー
PID プロセスID(一意の番号)
%CPU CPU使用率
%MEM メモリ使用率
STAT プロセスの状態(S=スリープ、R=実行中など)
COMMAND 実行されているコマンド

STAT列は雑にいうと「プロセスが今何してるか」で、S(待機中)が多ければ正常、R(実行中)ばかりだと何かに張り付いて重い可能性あり、というような見方もできる

リアルタイム監視

wsl
# CPU・メモリ使用率の高いプロセスをリアルタイムで監視(qで終了)
top

# topの強化版(事前に sudo apt install -y htop でhtopのインストールが必要)
htop

topは今動いてるプロセスのうち、リソースを食ってるやつを上から順に表示してくれる
サーバーが重い時などに叩くと有効

htopはtopでの一覧をさらに見やすく表示できるパッケージで、カラー表示、マウス操作・矢印キー操作も可能で、視認性が高い

プロセスを止める

wsl
# PIDを指定して終了させる
kill 1234

# それでも終わらない時の強制終了(最終手段)
kill -9 1234

# プロセス名で一括終了
pkill nginx

killは名前的に物騒だが、実態は「プロセスにシグナルを送る」コマンド

デフォルトではSIGTERM(終了して、と丁寧にお願い)を送る
-9をつけるとSIGKILL(問答無用で強制終了)になり、これは終了処理を踏まずに殺すのでファイル破損のリスクあり、最終手段として使う

通常はkill PIDで終わらない時のみ-9を使うのが鉄則

systemdについて

systemdLinuxのサービス管理システム

Nginxやデータベース、SSHなど、1つまたは複数のプログラムで構成されたサービス をサービスごとに起動・停止・自動起動設定するための仕組み

ちなみにLinuxのサービスのことをデーモンと呼ぶこともある。厳密に言えばデモーンとはバックグラウンドで常に動き続けてるプロセスのこと

systemd自体も複数のプロセスで動いている

systemctlコマンド

systemdを操作するのがsystemctlコマンド

wsl
# サービスの状態確認(よく使う)
sudo systemctl status nginx

# 起動
sudo systemctl start nginx

# 停止
sudo systemctl stop nginx

# 再起動(設定変更後によく使う)
sudo systemctl restart nginx

# 設定だけリロード(プロセスは止めない、可能なサービスのみ)
sudo systemctl reload nginx

# OS起動時に自動で立ち上げる設定
sudo systemctl enable nginx

# 自動起動を無効化
sudo systemctl disable nginx

systemctl status nginxの出力例

wsl
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2026-05-19 09:00:12 JST; 2h 15min ago
       Docs: man:nginx(8)
   Main PID: 842 (nginx)
      Tasks: 3 (limit: 4915)
     Memory: 5.2M
        CPU: 124ms
     CGroup: /system.slice/nginx.service
             ├─842 nginx: master process /usr/sbin/nginx
             └─843 nginx: worker process

注目すべきは以下の2行

  • Loaded: enabledなら自動起動ON、disabledならOFF
  • Active: active (running)なら起動中、inactive (dead)なら停止中

ちなみに restartreloadの使い分けは

  • restart: 一度プロセスを止めて再起動。ダウンタイムが発生する
  • reload: プロセスは生かしたまま設定だけ読み直す。ダウンタイムなし

本番運用ではできるだけreloadを使うのが基本(ただし対応していないサービスもある)

サービス一覧の確認

wsl
# 動いているサービスの一覧
systemctl list-units --type=service

# 自動起動設定の一覧
systemctl list-unit-files --type=service

WSL2でsystemctlが効かないとき

WSL2は最近のバージョンでsystemdに対応したが、デフォルトでは無効な場合がある
その場合は/etc/wsl.confに以下を追記し、PowerShellでwsl --shutdownしてから再起動する

[boot]
systemd=true

ログ・エラー管理

サーバーで問題が起きた時、原因を特定するために最初に見るのがログ

ログを読めないと、エラーが起きても「なんか動かない」で詰むので、ここはサーバー運用の基礎中の基礎

ログの保存場所

Linuxのログは/var/log/配下にまとまっている

wsl
ls /var/log/

出力例

auth.log         # 認証関連(SSHログイン等)
syslog           # システム全体のログ
nginx/           # Nginxのログ(access.log, error.log)
dpkg.log         # パッケージインストール履歴

サービスごとにディレクトリやファイルが分かれていることが多い

ログを読む基本コマンド

wsl
# 全体を表示(短いログ向け)
cat /var/log/nginx/error.log

# 末尾だけ表示(デフォルト10行)
tail /var/log/nginx/error.log

# 末尾50行
tail -n 50 /var/log/nginx/error.log

# リアルタイムで追従(ログが追記されるのを見続ける、Ctrl+Cで終了)
tail -f /var/log/nginx/access.log

# 先頭だけ表示
head /var/log/nginx/error.log

特にtail -fは神コマンドで、別のターミナルでアプリを動かしながらこちらでログを流し続け、リアルタイムで何が起きてるかを観察することが可能

ログから特定の文字列を探す

wsl
# ファイル内から"error"を含む行を抽出
grep "error" /var/log/nginx/error.log

# 大文字小文字を区別しない
grep -i "error" /var/log/nginx/error.log

# マッチした行の前後3行も表示(文脈を見たい時)
grep -C 3 "500" /var/log/nginx/access.log

# 複数ファイルから検索
grep -r "Exception" /var/log/

# tail -fの結果からgrepでフィルタ(合わせ技)
tail -f /var/log/nginx/access.log | grep "500"

grepはパイプと組み合わせると本領発揮するコマンドで、「膨大なログから必要な行だけ抜き出す」のに必須

journalctl:systemd管理のログを見る

systemdで管理されているサービスのログは、/var/log/にファイルとして残らず、ジャーナルという専用の仕組みで管理されている

それを参照するコマンドがjournalctl

wsl
# 全ログを表示(古い順、qで終了)
journalctl

# 末尾から逆順で表示
journalctl -r

# 特定のサービスのログだけ
journalctl -u nginx

# 直近の起動以降のログ
journalctl -b

# リアルタイム追従
journalctl -f

# 期間で絞る
journalctl --since "2026-05-19 09:00" --until "2026-05-19 10:00"
journalctl --since "1 hour ago"

# サービス + リアルタイム追従(最強の組み合わせ)
journalctl -u nginx -f
オプション 意味
-u <サービス名> 特定のサービスに絞る
-f リアルタイム追従(follow)
-r 逆順(reverse、新しい順)
-b 現在の起動以降のログ
--since / --until 期間指定

tail -f /var/log/...のsystemd版がjournalctl -fという認識でOK

ログのローテーション

ログは放っておくとどんどん溜まってディスクを食い潰すので、Linuxではlogrotateという仕組みで、古いログを自動で圧縮・削除している

wsl
# nginxディレクトリを見ると、過去のログが圧縮されている
ls /var/log/nginx/
出力例
access.log              # 現在のログ
access.log.1            # 1日前のログ
access.log.2.gz         # 2日前のログ(gzip圧縮済み)
access.log.3.gz

圧縮済み(.gz)のログを見たい時はzcatzlessを使う

wsl
zcat /var/log/nginx/access.log.2.gz
zless /var/log/nginx/access.log.2.gz

ディスク容量の確認

ログが溜まりすぎてディスクが圧迫された際に使用する、容量確認コマンドも合わせて覚えておく

wsl
# ファイルシステム全体の使用量
df -h

# 現在のディレクトリ配下のサイズ
du -sh ./*

# /var/logの中で大きいファイルTOP10を出す
du -ah /var/log | sort -rh | head -10

-hはhuman-readable(GB、MB等の単位で読みやすく表示)の意味で、dfduでは基本これを付ける

エラー調査のフロー

実際にエラーが起きた時、どういう順序で調査手順の例

例:「Nginxが動かない

  1. サービスの状態確認

    wsl
    sudo systemctl status nginx
    

    Active: failed等の表示があれば、その下にエラー概要が出る

  2. 詳細なログ確認

    wsl
    sudo journalctl -u nginx -n 50
    

    失敗時のスタックトレースを見る

  3. Nginx固有のエラーログ確認

    wsl
    sudo tail -n 50 /var/log/nginx/error.log
    

    設定ファイルのsyntax errorなどはここに出る

  4. 設定ファイルの構文チェック

    wsl
    sudo nginx -t
    

    ミスがあれば行数付きで教えてくれる


    この 「状態 → ログ → 詳細ログ → 構文確認 → 直近の変更」 という流れは他のサービスでも応用が利くエラー調査フロー

おわりに

今回はプロセス・systemd・ログ管理についての解説でした!
Linuxのシステムやサーバー上で何が起こっているのか、少し顕在化できた気がします。

次回はネットワーク基礎について書いていきたいと思います!

ご覧いただきありがとうございました🔥

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?