自作、ソースからコンパイルしたプログラムをsystemdにサービス登録をしたい
この疑問に回答します。
自作のプログラムや、ソースコードからコンパイル(OSが実行できる状態)したプログラムは手動でsystemdにサービス登録を行う必要があります。手順をまとめます。
自作プログラムを作成
まずは、簡単なプログラムを作成し、systemd に登録しサービスとして起動させます。1秒ごとに時間を記録するプログラムファイルです。
# vi /usr/local/bin/test.sh
#!/bin/sh while true do date >> /tmp/test.log sleep 1 done
実行権限を与えます。
# chmod +x /usr/local/bin/test.sh
Systemd で利用するためのUnit定義ファイルを作成する
systemd で利用するためにUnit定義ファイルを作成します。
# vi /etc/systemd/system/test.service
[Unit] Description = test daemon [Service] ExecStart = /usr/local/bin/test.sh Restart = always Type = simple [Install] WantedBy = multi-user.target
別の内容ですが、ソースからコンパイルしたプログラムをsystemdに登録した記事がありますので参考にしてください。
Unit定義ファイルをServiceとして認識したか確認する
systemdは指定のディレクトリにUnit定義ファイルを保存すると認識します。
# systemctl list-unit-files --type=service |grep test test.service disenabled
「systemctl list-unit-files –type=service」コマンドを実行し表示されるとsystemdが正しく認識しています。あとはサービスを登録・起動するだけでそす。
Systemdからサービスを登録・起動させる
systemdにサービスを登録し起動させます。
# systemctl enable test # systemctl start test
念のためにサービスの状態を確認します。
# systemctl status test ● test.service - test daemon Loaded: loaded (/etc/systemd/system/test.service; enabled; vendor preset: di> Active: inactive (dead) Jun 22 14:08:47 [mydomain] systemd[1]: /etc/systemd/system/test.service:3: Invalid section header '[Service] ExecStart = /usr/local/bin/test.sh' Jun 22 14:09:03 [mydomain] systemd[1]: /etc/systemd/system/test.service:3: Invalid section header '[Service] ExecStart = /usr/local/bin/test.sh' Jun 22 14:09:33 [mydomain] systemd[1]: /etc/systemd/system/test.service:3: Invalid section header '[Service] ExecStart = /usr/local/bin/test.sh' Jun 22 14:09:50 [mydomain] systemd[1]: /etc/systemd/system/test.service:3: Invalid section header '[Service] ExecStart = /usr/local/bin/test.sh'
自作したプログラムの出力結果も確認します。
# tail -f /tmp/test.log Mon Jun 22 14:01:46 JST 2020 Mon Jun 22 14:01:47 JST 2020 Mon Jun 22 14:01:48 JST 2020 Mon Jun 22 14:01:49 JST 2020
systemdでサービス一覧を確認する記事があるますので、参考にしてください。
以上、「Systemd を利用してサービスを追加・登録する」という記事でした。