Red Hat Certified System Administrator (RHCSA) #9 システム運用: chronyd、journald、cron、systemd timer、tuned

読了 9分

#8 パッケージと repository で dnf によるソフトウェアのインストールと管理を固めました。この記事では、インストールを終えたシステムを 運用状態に保つ日常作業 を整理します。時刻を合わせ、ログを読み、ジョブを予約し、パフォーマンスプロファイルを選ぶ作業は、RHCSA で作業ごとの点数がはっきり落ちる領域です。コマンドが単純なぶん、手に覚えさせておけば試験で素早く処理できます。

この 4 つ (時刻・ログ・予約・チューニング) の作業はすべて 再起動後も維持されて はじめて点数になります。cron ジョブが生きていなければならず、journald の永続保存が有効になっていなければならず、NTP 同期が起動後にも自動で行われなければなりません。そのためこの記事も永続適用を作業ごとに一緒に確認します。

システム時刻の管理 #

時刻がずれたシステムは、ログのタイムスタンプ、証明書の検証、クラスター同期ですぐに問題を起こします。RHEL 9 の時刻管理の入口は timedatectl であり、実際の時刻同期は chronyd サービスが NTP で担当します。

timedatectl で状態確認と設定 #

現在の時刻・タイムゾーン・同期状態を一目で見ましょう。

# 現在の状態を確認
timedatectl

# 出力例
#                Local time: Sat 2026-06-06 14:30:00 KST
#            Universal time: Sat 2026-06-06 05:30:00 UTC
#                  Time zone: Asia/Seoul (KST, +0900)
# System clock synchronized: yes
#               NTP service: active

System clock synchronized: yesNTP service: active が、同期が正常であることを教えてくれます。

タイムゾーンの設定は次のように行います。

# 利用可能なタイムゾーンの一覧から検索
timedatectl list-timezones | grep -i seoul

# タイムゾーンを設定
timedatectl set-timezone Asia/Seoul

# NTP 同期を有効化
timedatectl set-ntp true

NTP が有効な状態では時刻を手動で設定できないので、手動設定が必要なら、まず timedatectl set-ntp false で同期を切ってから timedatectl set-time "2026-06-06 14:00:00" のように指定します。試験ではほとんどの場合、NTP 同期を有効にするほうが正解です。

chronyd と /etc/chrony.conf #

実際の NTP 同期は chronyd が担当し、設定は /etc/chrony.conf に置きます。試験でよく出る作業は 指定された NTP サーバーを指すように設定ファイルを修正する ことです。

# パッケージがなければインストール
dnf install -y chrony

# 設定ファイルを編集
vi /etc/chrony.conf

/etc/chrony.conf の中心的なディレクティブは次のとおりです。

# NTP サーバーを指定 (試験で与えられたサーバーに置き換え)
server classroom.example.com iburst

# pool の形で複数サーバーの集合を受け取ることも可能
pool 2.rhel.pool.ntp.org iburst

# ローカルネットワークで時刻提供を許可する範囲
# allow 192.168.0.0/16

iburst オプションはサービス起動直後に素早く同期するようリクエストをまとめて送るので、試験でサーバーを追加するときに一緒に書いておくと同期確認が速くなります。

設定を変えたあとはサービスを再起動し、起動時の自動起動を保証します。

systemctl restart chronyd
systemctl enable chronyd

NTP 同期の確認 #

設定が実際に適用されたかは chronyc で確認します。

# 現在同期中のソース一覧
chronyc sources

# 出力例 (^* が現在同期中のサーバー)
# MS Name/IP address         Stratum Poll Reach LastRx Last sample
# ===============================================================
# ^* classroom.example.com         3   6    17    23   +12us[...]

# 同期の追跡状態 (オフセット、精度)
chronyc tracking

chronyc sources の出力で、サーバーの前の ^* 表示が現在同期中のソースを意味します。設定ファイルに書いたサーバーがこの一覧に現れ、timedatectlsynchronized: yes を示せば作業は完了です。

ログ管理: journald と rsyslog #

RHEL 9 のログは systemd の journald がバイナリジャーナルで収集し、journalctl で照会します。テキストログが必要なときは rsyslog/var/log/ 配下の伝統的なファイルにも記録します。

journalctl でログを読む #

journalctl のオプションは試験でそのまま問われることが多いので、よく使う形を整理します。

# 特定のユニット (サービス) のログだけ
journalctl -u sshd

# 優先度でフィルタ (err 以上だけ)
journalctl -p err

# 時間範囲でフィルタ
journalctl --since "2026-06-06 09:00:00"
journalctl --since "1 hour ago"
journalctl --since yesterday --until "2026-06-06 12:00:00"

# 今回の起動のログだけ
journalctl -b

# 直前の起動のログ (-1)
journalctl -b -1

# リアルタイムで追って見る
journalctl -f

-p (priority) は emergalertcriterrwarningnoticeinfodebug の順の優先度を受け取り、指定した水準 以上 を表示します。オプションは自由に組み合わせられるので、journalctl -u sshd -p err --since today のように一度に絞り込む練習が役立ちます。

journald の永続保存 (Storage=persistent) #

デフォルト状態の journald はログを /run/log/journal のメモリに置くので 再起動すると消えます。RHCSA 定番の作業は、このログをディスクに永続保存するように変えることです。

# 設定ファイルを編集
vi /etc/systemd/journald.conf

[Journal] セクションで Storage を次のように指定します。

[Journal]
Storage=persistent

永続保存は /var/log/journal ディレクトリに記録されます。ディレクトリをあらかじめ作り、権限を合わせてからサービスを再起動すると確実です。

# 永続保存ディレクトリを作成
mkdir -p /var/log/journal

# 所有権と権限を適用 (systemd 提供のツール)
systemd-tmpfiles --create --prefix /var/log/journal

# journald を再起動して設定を反映
systemctl restart systemd-journald

こうすると journalctl -b -1以前の起動のログまで 照会でき、設定が適用されたかを直接確認できます。

rsyslog を一行で #

journalctl ですべてのログを見られますが、RHEL は依然として rsyslog/var/log/messages/var/log/secure のようなテキストログも残します。設定は /etc/rsyslog.conf/etc/rsyslog.d/ に置き、認証ログは /var/log/secure、一般のシステムメッセージは /var/log/messages で確認するという点だけ覚えておけば十分です。

ジョブの予約: cron と systemd timer #

決まった時刻にジョブを動かす方法は、伝統的な cron と systemd の timer の 2 系統があります。RHCSA は主に cron を問いますが、systemd timer も一緒に知っておくと安全です。

ユーザー crontab #

ユーザーごとの予約ジョブは crontab コマンドで管理します。

# 現在のユーザーの crontab を編集
crontab -e

# 現在のユーザーの crontab 一覧を表示
crontab -l

# 特定ユーザーの crontab を編集 (root のみ可能)
crontab -u alice -e

# 現在のユーザーの crontab を削除
crontab -r

crontab 一行の形式は 分 時 日 月 曜日 コマンド の 5 フィールドです。

# ┌───── 分 (0-59)
# │ ┌───── 時 (0-23)
# │ │ ┌───── 日 (1-31)
# │ │ │ ┌───── 月 (1-12)
# │ │ │ │ ┌───── 曜日 (0-7, 0 と 7 は日曜日)
# │ │ │ │ │
# * * * * * 実行するコマンド

# 毎日 14 時 23 分に実行
23 14 * * * /usr/local/bin/backup.sh

# 毎週月曜日の午前 3 時ちょうど
0 3 * * 1 /usr/local/bin/weekly.sh

# 5 分ごと
*/5 * * * * /usr/local/bin/check.sh

試験では「特定のユーザーが毎日何時何分にあるコマンドを実行するように」といった形で出るので、crontab -u ユーザー -e で対象ユーザーを正確に合わせることが重要です。

/etc/cron.d とシステム cron #

システム単位の予約は /etc/crontab/etc/cron.d/ 配下のファイルに置きます。この形式はユーザー crontab と違って 時刻フィールドの次に実行ユーザー が追加されます。

# /etc/cron.d/mytask
# 分 時 日 月 曜日  ユーザー  コマンド
30 2 * * *  root  /usr/local/bin/system-backup.sh

このほか /etc/cron.daily//etc/cron.hourly/ のようなディレクトリに実行可能なスクリプトを置くと、その周期で自動実行されます。

systemd timer (.timer / .service) #

systemd timer は一対のユニットで動作します。何を実行するかを定義する .service と、いつ実行するかを定義する .timer です。

まず実行するジョブを .service で定義します。

# /etc/systemd/system/backup.service
[Unit]
Description=Daily backup job

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

次に実行時刻を .timer で定義します。

# /etc/systemd/system/backup.timer
[Unit]
Description=Run backup daily

[Timer]
OnCalendar=*-*-* 02:30:00
Persistent=true

[Install]
WantedBy=timers.target

OnCalendar は時刻を表現する中心的なディレクティブです。dailyweekly のような略語でも、Mon *-*-* 03:00:00 のように曜日と時刻を組み合わせても書けます。Persistent=true はシステムが停止していて取りこぼした実行を起動後に追いつかせます。

タイマーは .timer ユニットを enable します。

# ユニットを再ロードしてからタイマーを有効化
systemctl daemon-reload
systemctl enable --now backup.timer

# 登録されたタイマーと次の実行時刻を確認
systemctl list-timers

OnCalendar の表現が意図どおりに解釈されるかは次で検証できます。

# OnCalendar 表現の検証と次の実行時刻の出力
systemd-analyze calendar "*-*-* 02:30:00"

tuned でシステムプロファイルを調整 #

tuned はワークロードの性格に合わせてカーネル・ディスク・ネットワークパラメータの束を適用するサービスです。RHCSA では 指定されたプロファイルを有効化する 作業として出ます。

# tuned サービスを有効化 (必要なとき)
systemctl enable --now tuned

# 利用可能なプロファイル一覧と現在の推奨プロファイル
tuned-adm list

# 現在適用中のプロファイルを確認
tuned-adm active

# プロファイルを適用
tuned-adm profile throughput-performance

# システムに推奨されるプロファイルを自動選択
tuned-adm recommend

代表的なプロファイルとして、均衡型の balanced、スループット重視の throughput-performance、仮想マシンゲスト用の virtual-guest、レイテンシ最小化の latency-performance があります。試験では与えられたプロファイル名を tuned-adm profile で適用し、tuned-adm active で確認すれば十分です。

試験ポイント #

  • 時刻同期timedatectl set-timezone でタイムゾーンを合わせ、timedatectl set-ntp true で NTP を有効にします。NTP サーバーの指定は /etc/chrony.confserver/pool 行を直してから systemctl restart chronyd で反映し、chronyc sources^* で同期を確認します。
  • journald の永続保存/etc/systemd/journald.confStorage=persistent を入れ、/var/log/journal を作ってから systemctl restart systemd-journald で反映します。journalctl -b -1 で以前の起動のログが見えれば成功です。
  • ログの照会journalctl-u-p--since/--until-b を組み合わせて絞り込む練習をします。
  • cron ジョブcrontab -e で自分、crontab -u ユーザー -e で対象ユーザーのジョブを登録します。分 時 日 月 曜日 のフィールド順を正確に合わせます。
  • systemd timer.service.timer を一対で作り、OnCalendar で時刻を指定してから .timer を enable します。systemctl list-timers で次の実行を確認します。
  • tunedtuned-adm profile 名前 で適用し、tuned-adm active で確認します。
  • 永続適用。chronyd・tuned は systemctl enable、cron ジョブは登録自体で維持、timer は enable --now で起動後にも生きていてはじめて点数になります。

まとめ #

この記事で押さえたこと:

  • 時刻timedatectl でタイムゾーン・NTP を制御し、/etc/chrony.conf で NTP サーバーを指定し、chronyc sources/chronyc tracking で同期を確認します。
  • ログjournalctl のフィルタオプションでログを読み、Storage=persistent でジャーナルをディスクに永続保存します。テキストログは rsyslog/var/log/ に残します。
  • 予約crontab/etc/cron.d で cron ジョブを、.timer/.serviceOnCalendar で systemd timer を構成します。
  • チューニングtuned-adm でシステムのパフォーマンスプロファイルを適用し確認します。
  • 落とし穴。journald のデフォルト値は揮発性なので永続保存設定が抜けると再起動後に消え、cron のフィールド順や cron.d のユーザーフィールドの抜けがよくある失点の原因です。

次へ — 基本ネットワーキング #

システム運用の時刻・ログ・予約・チューニングを押さえました。ここからシステムをネットワークに載せる作業へ移ります。

#10 基本ネットワーキング: NetworkManager (nmcli)、hostname、/etc/hosts では、nmcli で接続を作り IP・ゲートウェイ・DNS を永続設定する方法、hostnamectl でホスト名を変える方法、そして /etc/hosts で名前を解決する方法まで、直接打ちながら整理します。

X