Linux でカスタム Systemd サービスを作成するためのステップバイステップ ガイド

Linux でカスタム Systemd サービスを作成するためのステップバイステップ ガイド

Linux でカスタム Systemd サービスをマスターする: 総合ガイド

Systemd は、さまざまな Linux ディストリビューションで堅牢かつ動的な init システムとして機能します。プログラムの実行、リソース管理、およびシステム全体の制御を容易にします。このガイドでは、Ubuntu でカスタマイズされたサービス ユニットを作成することで、Systemd の潜在能力を最大限に活用できるようにします。

Systemd サービスユニットを理解する

サービス ユニットは、本質的には、特定のアプリケーションを実行するために必要な構成の概要を示す標準化されたファイルです。プログラムに関するメタデータ、実行ディレクティブ、およびセッション中の Systemd のアクセス フレームワークに関する詳細をカプセル化します。

Systemd 対応環境のすべてのデーモンは、サービス ファイルによって制御されます。たとえば、OpenSSH は、Debian および Ubuntu システムでの機能を指定するために、ssh.serviceにあるユニットを使用して動作します。/etc/systemd/system/

OpenSSH のサービス ユニットを表示する端末。

一般的に、サービス ユニット ファイルはUnit、、、Serviceの3 つの主要なセクションに構造化されていますInstallUnitセクションはアプリケーションのメタデータと依存関係を示し、Serviceセクションはアプリケーションの場所と実行方法を指定します。最後に、 セクションInstallは、Systemd によってアプリケーションがいつ開始できるかを明確にします。

システムレベルのカスタムサービスの作成

カスタム サービスは、昇格された権限を必要とするタスクを自動化したり、Systemd タイマーを利用したりするのに非常に役立ちます。典型的な例としては、システムの再起動後に Minecraft サーバーが確実に起動することを保証することが挙げられます。

カスタムシステムレベルサービスを作成する手順

  • 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
  • サービスをカスタマイズする:サービスに関連する詳細に合わせて、Descriptionおよびフィールドを調整します。ExecStart
  • ファイルの移動:保存してサービス ディレクトリに転送します:
  • sudo cp ~/my-system-app.service /etc/systemd/system/
  • Systemd デーモンをリロードします。次のコマンドを実行してサービスをリロードします。
  • sudo systemctl daemon-reload
  • サービスを開始する:カスタム システム レベル サービスを開始します。
  • sudo systemctl start my-system-app.service
  • 機能の確認:サービスが動作していることを確認します。
  • systemctl status my-system-app.service
カスタム サービスが正常に実行されていることを示す端末。

ユーザーレベルのカスタムサービスを確立する

Systemd は、Systemd-user を使用したルートレス サービスの作成をサポートしており、ルート アクセスを最小限に抑えてセキュリティを強化しながら、非ルート ユーザーが個人のアプリケーションを効果的に処理できるようにします。

ユーザーレベルのカスタム サービスを作成する方法:

  • ユニット ファイルを設定する:ホーム ディレクトリに新しいユニット ファイルを作成します。
  • 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
  • ExecStart を調整します。指定されたパスがExecStartユーザー アカウントからアクセスできることを確認します。
  • ユーザーのローカル Systemd ディレクトリを作成します。
  • mkdir -p ~/.config/systemd/user/
  • ユニット ファイルをコピーします。カスタム サービス ユニットをローカル ディレクトリに転送します。
  • cp ~/my-user-app.service ~/.config/systemd/user/
  • ユーザーの Systemd をリロードします。Systemdがユーザー ディレクトリの変更をチェックしていることを確認します。
  • systemctl daemon-reload --user
  • サービス ステータスの確認:ユーザー サービスが正しく認識されていることを確認します。
  • systemctl --user status my-user-app.service
systemctl で認識されたカスタム ユーザー サービスを表示する端末。

カスタム Systemd サービスの最適化

Systemd の柔軟性により、ユーザーはサービスのパラメータと動作を細かく調整できます。

環境変数の統合

環境変数は、設定ファイルを変更することなく Linux プログラムに追加のコンテキストを提供し、Systemd はサービス ユニットへの組み込みをサポートします。

  • サービスを無効化する:まず、変更したいサービスを無効にします。
  • systemctl --user disable --now my-user-app.service
  • サービス ファイルを編集します。お好みのテキスト エディターでユニット ファイルを開きます。
  • sudo nano ~/.config/systemd/user/my-user-app.service
  • サービス セクションを変更します。セクションの下に[Service]、次の内容を含めます。
  • Environment="VARIABLE_NAME=VALUE"
  • デーモンをリロード:変更を適用するには、Systemd デーモンを保存してリロードします。
  • 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-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 サービスのトラブルシューティングを行うことができます。

出典と画像

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です