概要
systemdはLinuxシステムでサービスの起動、停止、管理を行うためのシステム管理デーモンです。自作プログラムをsystemdのサービスとして登録することで、システムの起動時に自動的にプログラムが起動したり、必要に応じて再起動することが可能です。
メリット
- 自動化: システムの起動時や停止時にプログラムが自動的に管理されます。
- 手動制御の容易さ:
systemctl start
やsystemctl stop
コマンドを使って簡単にプログラムを制御できます。 - 耐障害性:
Restart=always
オプションを設定することで、プログラムが予期せず終了した場合でも自動的に再起動します。
手順
1.スクリプトの作成: プログラムを起動・停止するシェルスクリプトを作成します。
# vi /usr/local/start-program.sh # vi /usr/local/stop-program.sh
それぞれに記述する内容はこちら。
(プログラム起動)に作成したプログラムを起動するコマンドを記載します。
#!/bin/bash # start-script.sh echo "Starting my program..." (プロセス起動) # stop-script.sh echo "Stopping my program..." (プロセス停止)
2.Unitファイルの作成: /etc/systemd/system/
に以下の内容で userprogram.service
ファイルを作成します。
# vi /etc/systemd/system/userprogram.service [Unit] Description=User Program Services After=network.target [Service] Type=oneshot ExecStart=/usr/local/start-program.sh ExecStop=/usr/local/stop-program.sh RemainAfterExit=yes Restart=always [Install] WantedBy=multi-user.target
Unit : サービスの説明や依存関係を定義します。
Service : サービスの動作やスクリプトの実行方法を設定します。
ExecStart/ExecStopに先ほど作成したスクリプトを指定しています。
Restart=alwaysを追加すると落ちたときに自動再起動してくれます。
Install : サービスがどのランレベルで有効化されるかを指定します。
GUIで起動する
3.サービスファイルの権限設定:
# chmod 644 /etc/systemd/system/userprogram.service
4.サービスの有効化と起動:
# systemctl enable userprogram.service # systemctl start userprogram.service
起動したらstatusを確認してみましょう。
# systemctl status userprogram.service ● userprogram.service - User Program Services Loaded: loaded (/usr/lib/systemd/system/userprogram.service; enabled; vendor preset: disabled) Active: active (exited) since 木 2024-03-21 13:02:25 JST; 16min ago Process: 2071 ExecStart=/usr/local/start-program.sh (code=exited, status=0/SUCCESS) Main PID: 2071 (code=exited, status=0/SUCCESS) Loaded:Unitファイル名、自動起動がenabled Active:activeは起動状態、deadは停止状態
簡単な見方
・Loaded:のカッコ()内のenabledは自動起動on
・Active: activeが起動状態