Linuxで任意の実行ファイルをサービスとして実行する
Linux サービスとして任意の実行ファイルを実行する
以下は、Linuxで任意の実行可能ファイルをサービスとして実行する方法に関する指示です。Systemdを使用して任意の実行可能ファイルをサービスとして実行する方法。
上記は、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
コメント
これ以降、start
、stop
、restart
、status
などの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