
Linux でカスタム Systemd サービスをマスターする: 総合ガイド
Systemd は、さまざまな Linux ディストリビューションで堅牢かつ動的な init システムとして機能します。プログラムの実行、リソース管理、およびシステム全体の制御を容易にします。このガイドでは、Ubuntu でカスタマイズされたサービス ユニットを作成することで、Systemd の潜在能力を最大限に活用できるようにします。
Systemd サービスユニットを理解する
サービス ユニットは、本質的には、特定のアプリケーションを実行するために必要な構成の概要を示す標準化されたファイルです。プログラムに関するメタデータ、実行ディレクティブ、およびセッション中の Systemd のアクセス フレームワークに関する詳細をカプセル化します。
Systemd 対応環境のすべてのデーモンは、サービス ファイルによって制御されます。たとえば、OpenSSH は、Debian および Ubuntu システムでの機能を指定するために、ssh.service
にあるユニットを使用して動作します。/etc/systemd/system/

一般的に、サービス ユニット ファイルはUnit
、、、Service
の3 つの主要なセクションに構造化されていますInstall
。Unit
セクションはアプリケーションのメタデータと依存関係を示し、Service
セクションはアプリケーションの場所と実行方法を指定します。最後に、 セクションInstall
は、Systemd によってアプリケーションがいつ開始できるかを明確にします。
システムレベルのカスタムサービスの作成
カスタム サービスは、昇格された権限を必要とするタスクを自動化したり、Systemd タイマーを利用したりするのに非常に役立ちます。典型的な例としては、システムの再起動後に Minecraft サーバーが確実に起動することを保証することが挙げられます。
カスタムシステムレベルサービスを作成する手順
- Systemd ユニット ファイルを作成する:ホーム ディレクトリに新しいユニット ファイルを作成することから始めます。
- 構成の挿入:新しいユニット ファイル内に次のテンプレートを追加します。これは有効な基本構成として機能します。
- サービスをカスタマイズする:サービスに関連する詳細に合わせて、
Description
およびフィールドを調整します。ExecStart
- ファイルの移動:保存してサービス ディレクトリに転送します:
- Systemd デーモンをリロードします。次のコマンドを実行してサービスをリロードします。
- サービスを開始する:カスタム システム レベル サービスを開始します。
- 機能の確認:サービスが動作していることを確認します。
nano ~/my-system-app.service
[Unit] Description=My First Service After=network.target [Service] Type=simple ExecStart=/path/to/bin Restart=always [Install] WantedBy=multi-user.target
sudo cp ~/my-system-app.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl start my-system-app.service
systemctl status my-system-app.service

ユーザーレベルのカスタムサービスを確立する
Systemd は、Systemd-user を使用したルートレス サービスの作成をサポートしており、ルート アクセスを最小限に抑えてセキュリティを強化しながら、非ルート ユーザーが個人のアプリケーションを効果的に処理できるようにします。
ユーザーレベルのカスタム サービスを作成する方法:
- ユニット ファイルを設定する:ホーム ディレクトリに新しいユニット ファイルを作成します。
- 基本構成を挿入します。ユニット ファイルで次のフレームワークを使用します。
- ExecStart を調整します。指定されたパスが
ExecStart
ユーザー アカウントからアクセスできることを確認します。 - ユーザーのローカル Systemd ディレクトリを作成します。
- ユニット ファイルをコピーします。カスタム サービス ユニットをローカル ディレクトリに転送します。
- ユーザーの Systemd をリロードします。Systemdがユーザー ディレクトリの変更をチェックしていることを確認します。
- サービス ステータスの確認:ユーザー サービスが正しく認識されていることを確認します。
nano ~/my-user-app.service
[Unit] Description=My First User Service After=graphical-session.target [Service] Type=simple ExecStart=/path/to/bin [Install] WantedBy=default.target
mkdir -p ~/.config/systemd/user/
cp ~/my-user-app.service ~/.config/systemd/user/
systemctl daemon-reload --user
systemctl --user status my-user-app.service

カスタム Systemd サービスの最適化
Systemd の柔軟性により、ユーザーはサービスのパラメータと動作を細かく調整できます。
環境変数の統合
環境変数は、設定ファイルを変更することなく Linux プログラムに追加のコンテキストを提供し、Systemd はサービス ユニットへの組み込みをサポートします。
- サービスを無効化する:まず、変更したいサービスを無効にします。
- サービス ファイルを編集します。お好みのテキスト エディターでユニット ファイルを開きます。
- サービス セクションを変更します。セクションの下に
[Service]
、次の内容を含めます。 - デーモンをリロード:変更を適用するには、Systemd デーモンを保存してリロードします。
- サービスを再起動します:新しい環境変数を使用して再起動します:
systemctl --user disable --now my-user-app.service
sudo nano ~/.config/systemd/user/my-user-app.service
Environment="VARIABLE_NAME=VALUE"
systemctl --user daemon-reload
systemctl --user start my-user-app.service

リソースの使用を制限する
Systemd は、公平な利用を確保するためにサービスのリソース使用を規制するメカニズムを提供します。
- 対象サービスを無効にします。まず、完全に無効にします。
- ユニットファイルを編集します。次のコマンドでサービスファイルを開きます。
- リソース制限を追加する:たとえば、メモリを制限するには:
- ユニットの変更を再読み込み:新しい設定を再読み込みします:
- リソース使用状況の監視:次の方法でサービスのパフォーマンスを追跡します。
sudo systemctl disable my-system-app.service
sudo nano /etc/systemd/system/my-system-app.service
MemoryHigh=SIZE
sudo systemctl daemon-reload
systemd-cgtop

結論
Systemd を調査すると、Linux のプロセス管理の大きな可能性が解き放たれます。タスクの自動化からリソース効率の管理まで、カスタム サービスを作成することで、システムの相互運用性とパフォーマンスを大幅に向上できます。Systemd とその幅広い機能についてさらに詳しく調べ、Sudo と比較した Run0 の優位性を調べて、より詳細な理解を深めることを検討してください。
画像クレジット: Mikhail Fesenko (Unsplash 経由)。すべての変更とスクリーンショットは Ramces Red によるものです。
よくある質問
1.従来の init システムと比較して Systemd サービスを使用する利点は何ですか?
Systemd は、並列サービス起動、依存関係管理、およびサービス処理への統一されたアプローチを提供し、従来の init システムと比較して全体的なパフォーマンスと信頼性を向上させます。
2.1 つのアプリケーションに対して複数のサービスを作成できますか?
はい、単一のアプリケーションに対して複数のサービス ユニットを作成して、異なる構成での開始や特定の条件下での開始など、さまざまな側面を管理できます。
3. Systemd サービスの問題をトラブルシューティングするにはどうすればよいですか?
journalctl -u my-service-name.service
ログをチェックしたり、systemctl status my-service-name.service
現在のステータスやエラー メッセージを調査したりするコマンドを使用して、Systemd サービスのトラブルシューティングを行うことができます。
コメントを残す ▼