このページの目次
systemd 操作マニュアル
systemd は Linux のユーザー空間における init システムおよびサービスマネージャーです。ユニットタイプ(service/timer/socket/mount)、依存関係、ログシステム、オーバーライドメカニズムを理解することは、運用管理の基礎となります。
プロセス確認: btm (bottom, top の代替 — CPU/メモリ/ディスク/温度の TUI), procs (ps の代替 — カラースタイル, 自動カラム幅, プロセスツリー)
ステータスの確認
# ユニットの状態、最新のログ10行、cgroup ツリー、メイン PID を表示
# Active: active (running) since ... — 実行中
# Active: inactive (dead) — 停止中
# Active: failed — 起動失敗 (終了コードを確認)
# 全ユニットをリスト表示し、状態別にフィルタリング
# ユニットが有効化されているか(起動時に自動起動するか)を確認
# ユニットの依存関係ツリーを表示
# ユニットファイルの内容(すべての drop-in を含む)を表示
# 全タイマーと次回トリガー時刻を表示
管理
# 起動/停止/再起動
# 違い: reload は接続を中断しないが、restart は中断する
# サービスが reload をサポートしていない場合、このコマンドは失敗する
# mask と disable の違い: disable 後は手動で start 可能だが、mask 後は手動での start も拒否される
# ユニットファイルを変更した後に必ず実行
# failed ステータスをクリア(しないと status で常に failed と表示される)
ユーザーレベルサービス
# ユーザーサービスはシステムサービスとは独立している: ~/.config/systemd/user/
# ユーザーがログアウトするとデフォルトで停止する(lingering を有効にするまで)
# lingering を有効化(ログアウト後もサービスを継続して実行):
# 用途: rathole-watchdog, ローカルの llama-server など、常駐が必要なユーザーサービス
Timer
Timer は指定された時間に対応する service をトリガーします(同名の .timer/.service ペアを使用):
# timer の定義を確認
# 手動でトリガー(次回の待ち時間なし)
# /etc/systemd/system/mytask.timer
[Timer]
# 前回アクティブ化後、5分ごとにトリガー
OnUnitActiveSec=5min
# 起動後、2分後に初回トリガー
OnBootSec=2min
# ランダムな遅延30秒(多数のサーバーが同時に実行するのを防ぐ — サンダリングハーデ現象対策)
RandomizedDelaySec=30
# 見逃したトリガーを補完(例: サーバーがスリープしていた場合)
Persistent=true
[Install]
WantedBy=timers.target
# /etc/systemd/system/mytask.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mytask.sh
User=myuser
ログ
|
# スペース管理
Override
ユニット設定を変更する場合、/usr/lib/systemd/system/ を直接編集するのではなく、drop-in を作成してください(パッケージ管理で上書きされるため):
# エディタを開いて override を作成
# → /etc/systemd/system/nginx.service.d/override.conf
# または手動で作成
ExecStart= の最初の行による空欄設定は必須です。先に空欄にしないと、新しい ExecStart は追加ではなく上書きされません。
トラブルシューティング
# サービスが起動しない場合
# 起動のボトルネックを分析
|
# ユニットファイルを検証
# 特定のユニットが mask されているため WantedBy が無効になっている場合
|