はじめに
Linuxサーバーの運用管理において、バックグラウンドプロセスの制御は日常的に行う重要オペレーションの一つです。しかし、分厚いマニュアルを隅から隅まで読み通すのは骨が折れる作業です。そこで本稿では、現場のインフラ業務ですぐに役立つsystemctlの必須操作を、手を動かしながら身につく実践形式で整理しました。Webサーバーの代表格であるNginxを題材に、プロセスの起動・停止、動作状況の診断、さらにはOSブート時の自動起動設定に至る一連の流れを体系的に学んでいきましょう。
検証用パッケージの導入と稼働ステータスの確認(status)
動作検証の対象とするため、まずはテスト用Webサーバーとして広く使われているnginxを環境へセットアップします。

システム上で各デーモンが正常に息をしているかを確かめるには、systemctl statusを実行します。プロセスの生存状況だけでなく、自動起動の可否や直近に出力されたログメッセージまで総合的に取得可能です。
実行結果を確認すると、ブート時の自動起動設定自体は有効化(enabled)されているものの、現段階ではプロセス本体が待機状態のまま停止(inactive)している状況が読み取れます。
⚙️ [実務で重宝する主要フラグ]
-l(--full):端末の横幅に合わせてログやユニット情報が省略されるのを防ぎ、出力行全体を漏れなく表示させます。--no-pager:lessなどのページャプログラムを介さず、標準出力へ直接全テキストを流し込みます。パイプライン処理やログ保存時に重宝します。-t(--type):service・socket・mountといった指定のユニット種別だけに絞り込んで結果を抽出します。-a(--all):非アクティブ状態や未読み込みのユニットも含め、systemd配下にあるすべての管理対象を網羅的にリストアップします。--failed:異常終了したり起動に失敗した障害ユニットだけをピンポイントで抽出します。トラブルシューティング時の初動調査に最適です。

プロセスのライフサイクル制御:起動・停止・再起動(start, stop, restart)
稼働中のNginxデーモンを即座にシャットダウンしたい場合は、sudo systemctl stop nginxを発行します。
システム基盤に直接関わるプロセス制御には管理者権限が不可欠なため、sudoを付与して実行します。処理が正常に完了した際は、端末に余計なメッセージは出ずそのままプロンプトが返ってきます。

プロセスの稼働有無だけをスクリプト等で手軽に判定したいシチュエーションでは、systemctl is-active nginxが極めて便利です。
直前のコマンドでプロセスを停止させたため、非稼働状態を示すinactiveという簡潔な文字列が出力されます。

続いて、待機状態のNginxを現場に復帰させるため、sudo systemctl start nginxを実行してサービスを起動させます。
停止操作と同様に管理者特権を要求されますが、内部で例外が発生しなければ画面上には何も表示されず静かに処理が完了します。

サーバー設定ファイルのリロードやメモリキャッシュのクリアなど、デーモンプロセスを完全に初期化したいケースではsudo systemctl restart nginxを用います。内部的にはプロセスの終了と再立ち上げが連続して処理されます。

再起動完了後、デーモンが想定通り立ち上がっているかを先ほどのsystemctl is-active nginxで改めて検証します。
プロセスが正しく稼働中であれば、正常起動中を示すactiveのステータスが得られます。

OSブート時の自動起動構成とその解除(enable, disable)
サーバーマシンが不慮の再起動に見舞われた際にもWebサイトをダウンさせないよう、OSブートと同時にプロセスが自動立ち上げされる構成をsudo systemctl enable nginxで定義します。
このコマンドを実行すると、systemdは/etc/systemd/system/配下に該当ユニットファイルへのシンボリックリンクを自動生成し、起動ターゲットへの紐付けを完了させます。

システム起動時の自動実行フラグが正しくセットされているかを判定するには、systemctl is-enabled nginxを実行します。
先ほどの組み込み処理が成功していれば、有効状態を示すenabledが返却されます。

メンテナンスや構成変更などの理由でブート時の自動起動を取りやめたい場合は、sudo systemctl disable nginxを発行します。
この操作により、先ほど作成されたシンボリックリンクが綺麗に破棄され、起動シーケンスから切り離されます。

解除処理の反映結果を確認するため、再度systemctl is-enabled nginxを実行してみましょう。
自動立ち上げ設定が無効化されているため、期待通りdisabledが出力されます。

検証の仕上げとして、本番環境の標準的な構成に戻すべくsudo systemctl enable nginxを再度走らせて自動実行を有効化しておきます。
リンクが再構築され、次回以降のシステムリブート時にも自動的にWebサーバーが稼働する堅牢な構成が整いました。

稼働ユニットの一覧抽出と異常終了サービスの検知(list-units, failed)
システム全体で稼働しているプロセスの全体像を俯瞰するには、systemctl list-units --type=service --state=running --no-pager | head -n 15を利用します。
サービス(--type=service)かつ正常実行中(--state=running)のユニットのみを抽出し、冒頭15行を一覧表示するパイプライン処理です。先ほど起動したnginx.serviceをはじめ、OSを支える重要デーモン群がバックグラウンドで力強く動作している様子が確認できます。

サーバー監視や障害調査において真っ先に叩くべきコマンドがsystemctl --failed --no-pagerです。立ち上げシーケンスでエラーを吐いたサービスや、クラッシュして異常停止したユニットだけをリストアップしてくれます。
画面に0 loaded units listedと返ってきた場合は、システム内に異常停止したサービスが一つも存在せず、OS基盤が極めて健全なコンディションで稼働していることを証明しています。

本チュートリアルでは、Linuxにおけるサービス制御の要となるsystemctlの必須オペレーションを、手を動かしながら実践的に体験していただきました。
日々のサーバー運用やトラブルシュートの現場において、systemd配下のプロセスを迷わず自在にハンドリングするための実践知としてぜひ活用してください。