Linuxで任意の実行ファイルをサービスとして実行する

Linux サービスとして任意の実行ファイルを実行する

目次

以下は、Linuxで任意の実行可能ファイルをサービスとして実行する方法に関する指示です。Systemdを使用して任意の実行可能ファイルをサービスとして実行する方法

linux cogs 上記は、LinuxのDIYアプローチを象徴する歯車のAI生成画像(Flux 1 devモデルによる)です。Flux 1 dev - text to image test

Systemd

Systemdは、いくつかのLinuxディストリビューションで使用されるシステムおよびサービスマネージャー、初期化ツールです。

Systemdを搭載している一部のポピュラーなディストリビューションは以下の通りです:

  • Ubuntu 16.04以降
  • Debian Jessie以降
  • Arch Linux
  • CentOS 7 / RHEL 7以降
  • Fedora 15以降

systemctl

systemctlは、systemdを制御するためのコマンドラインツールです。

すべてのサービスを一覧表示

すべてのサービスを一覧表示するには、以下のコマンドを実行してください:

systemctl list-units --type=service

サービスファイルの作成

systemdのサービスディレクトリに移動し、.service拡張子を持つ新しいファイルを作成してください:

sudo nano /etc/systemd/system/your_service_name.service

サービスファイルの設定:

ファイルに以下の内容を追加し、必要に応じて値を調整してください:

[Unit]
Description=Your Service Description
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/path/to/your/executable/directory
ExecStart=/path/to/your/executable
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

ファイルを保存し、閉じてください。

サービスの開始を遅延させる

サービスの開始時にタイミングの問題が発生している可能性がある場合は、サービス設定に遅延を追加してください:

[Service]
ExecStartPre=/bin/sleep 10

サービスの依存関係

サービスの依存関係を設定するには、サービス設定ファイルの[Unit]セクションに以下のディレクティブを追加してください:

他のサービスが自分のサービスより先に開始されるように指定するには、After=を使用してください:

After=network.target other_service.service

必須の依存関係を定義するには、Requires=を使用してください:

Requires=required_service.service

オプションの依存関係を定義するには、Wants=を使用してください:

Wants=optional_service.service

systemdを再読み込みして新しいサービスを認識させる

sudo systemctl daemon-reload

サービスの依存関係を確認する

sudo systemctl list-dependencies your_service_name.service

ブート時にサービスを起動するように設定

sudo systemctl enable your_service_name.service

サービスがブート時に起動されるように設定されているかを確認するには:

sudo systemctl is-enabled your_service_name.service

サービスを起動する

sudo systemctl start your_service_name.service
# または
sudo systemctl restart your_service_name.service

サービスの状態を確認する

何か問題が発生した場合は、Linuxのサービスログおよび状態を確認してください:

sudo systemctl status your_service_name.service

または

sudo journalctl -u your_service_name.service

Pythonスクリプトの場合

ExecStart=/path/to/conda/envs/my_env_name/bin/python /path/to/executable.py

コメント

これ以降、startstoprestartstatusなどのsystemctlコマンドを使用してサービスを管理できます。

パラメータが必要な実行ファイルの場合は、サービスファイルのExecStart行を適切に変更してください。

例えば、Javaアプリケーションを実行する必要がある場合は、ExecStart行にJavaのフルコマンドを使用してください。

ファイルの権限や所有権を必要に応じて調整し、実行ファイルが正しい実行権限を持っていることを確認してください。

chkserviceを使用したSystemdサービスの制御

sudo systemctl start some-serviceservice
# または
sudo systemctl restart some-serviceservice

の代わりに、コンソールUIツールを使用できます。簡単で軽量です。

sudo apt-get install chkservice

sudo chkservice

有用なリンク