見出し画像

【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

下記からダウンロードできます。
利用規約に同意の上、ご利用ください。

https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=Linux_サービス系


いいなと思ったら応援しよう!

Rcat999
情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。