【Linux】Systemd メモ
Linuxでのプログラム自動起動に関するsystemdの使い方メモと、サービスの作成や登録に関する自作スクリプトのまとめです。
お役に立てば嬉しいです。
基本のオプション
systemctl [オプション] [サービス名.service]
start
開始stop
停止restart
再起動reload
再読み込みstatus
状態表示enable
自動起動オンdisable
自動起動オフis-enable
自動起動確認daemon-reload
設定ファイルの再読み込み
サービス一覧表示
systemctl list-unit-files --type=service
自作サービスの作成
ユニットファイルの作成
以下はrcatが使用しているテンプレートです。
ここにサービスに関する情報をいろいろ書くことで、自作のスクリプトなどを起動時に実行できるようになります。
ちょっとメモしておきますが、もっと細かいことはChatGPTにでも聞くと教えてくれます
[Unit]
Description=Rcat999Service
[Service]
Type=simple
WorkingDirectory=/myservice
ExecStart=/bin/sh /myservice/Startup.sh
StandardOutput=file:/myservice/Startup.log
[Install]
WantedBy=multi-user.target network-online.target
Unit
概要などを書くdescription サービスの説明です。
Service
ここで起動するサービス関する設定を行います。Type
サービスのタイプ、少し種類があるらしいです。WorkingDirectory
作業ディレクトリ。こういうのやる人なら分かりますよね。ExecStart
実行文。Shellに入力するのと同じ要領で何をどんな引数を持って実行するかを書いておきます。StandardOutput
標準出力をテキストに出力する場合は、ここに出力先のパスを書いておきます。User
User=myuser
Group=mygroup
実行するユーザーを指定します。書かなければrootで実行されます。Environment
Environment=VAR1=value1
環境変数を設定します。
例えば$HOMEなどのユーザーの環境変数は使えないことがあるので、経験上設定しておかないと立ち上がらないPythonライブラリなどがあります。(立ち上がらないと思ったら、まさかのHOME変数がありませんというエラーが出てくるという)
Install
起動する条件なんかを書いておきます。WantedBy=multi-user.target network-online.target
インターネットに接続していないと起動しません
ユニットファイルの自動作成
いくらテンプレートを書いていたとしても、何度もやるかつ回数は多くないので結構忘れるのでスクリプトにしちゃいました。
具体的には実行するシェルスクリプトを作成しておき、それを起動するためのサービスを自動的に作成するという形です。
rcat@rcat-Green-G5:/Rcat_Service/Script/gameserver2/bot$ CreateService-sh
###サービス作成###
操作を選択
[1] 新規作成
[2] 既存のサービスファイルから作成
※本スクリプトはroot権限で実行してください
実行するSHスクリプトは?
フルパスで入力してください
このディレクトリにある以下を使う場合は空欄
/Rcat_Service/Script/gameserver2/bot/start.sh
引数があれば入力
サービス名は?
ファイル名と同じ場合は空欄
※英数字のみ
R_GameBOT
ネットワークがオンラインであることを条件とする
(y/n)
y
標準出力をログに出力しますか?
(y/n)
y
以下の内容で作成します
--------------------------------------------
[Unit]
Description=R_GameBOT
After=network-online.target
[Service]
User=rcat
Type=simple
WorkingDirectory=/Rcat_Service/Script/gameserver2/bot
ExecStart=/Rcat_Service/Script/gameserver2/bot/start.sh
StandardOutput=file:/Rcat_Service/Script/gameserver2/bot/log.log
[Install]
WantedBy=multi-user.target network-online.target
--------------------------------------------
(y/n)
例えばこの例では以下しか入力していません。
1,Enter,Enter,R_GameBOT,y,y,y
はい、とても簡単です。これだけでユニットファイルが作成できます。
サービスの追加
出来上がったものは2つ目のスクリプトServeceAddを使って追加します。
中身はこんな感じになっていて、etcにコピーするだけですね。
スクリプト配布
上で紹介したサービスを作成するスクリプトと追加するスクリプトおよび削除するスクリプトを配布します。
内容は以下の通りです。
このスクリプトを起動する際は、以下のような形でエイリアスに事前に入れておくと使いやすいです。
入れたくない場合はコマンドの部分だけ入力して使ってください。
配布URL
下記からダウンロードできます。
利用規約に同意の上、ご利用ください。