かべぎわブログ

技術的なことについてかけたらいいな…

Amazon Linux2 に自作サービスを追加する

今回はAmazonLinux2のSystemdに自作サービスを追加してみようと思います。

手順

AmazonLinux2に自作のサービスを追加するための手順です。

サービスとして追加するスクリプトの準備

今回は以下のような約1秒ごとにdateを出力するようなスクリプト()(wawawa.sh)をサービスとして追加してみようと思います。

#!/bin/bash
while true
do
    date >> /home/ec2-user/result.log
    sleep 1
done

ユニットファイルを作成する

/etc/systemd/system配下にユニットの定義ファイルを作成します。
wawawa.serviceのところは好きな名前に書き換えてあげてください。

$ sudo vim /etc/systemd/system/wawawa.service

ファイルの中身をこんなかんじに編集してあげます。

[Unit]
Description = wawawa_shell

[Service]
ExecStart = /home/ec2-user/wawawa.sh
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target

各項目のちょっとした解説

項目 説明
Description このサービスの説明
ExecStart 起動するコマンドのPATH
Restart 停止時の起動条件alwaysを指定してあげると停止時に再起動してくれる
WantedBy 起動時に設定した.wantsディレクトリにリンクを作成する

サービスとして認識されたかどうか確認する

以下コマンドを実行してサービスとして認識されたかどうか確認します。
まだ有効化(enable)していませんのでdisaabled でOKです。

sudo systemctl list-unit-files --type=service | grep wawawa
wawawa.service                                disabled

サービスを有効化(enable)する

サービスを起動する前に有効化してあげる必要があります。
以下コマンドを実行します。

$ sudo systemctl enable wawawa
Created symlink from /etc/systemd/system/multi-user.target.wants/wawawa.service to /etc/systemd/system/wawawa.service.

念のため有効化されたかどうか確認
enableになっていればOK

$ sudo systemctl list-unit-files --type=service | grep wawawa
wawawa.service                                enabled 

サービスを起動する

さていよいよサービスを起動していきます。

$ sudo systemctl start wawawa

なにも問題なければ特に出力もありません。

続いてサービスが本当に起動できているのかどうか確認していきます。
以下のようにActive: active (running)となっていれば起動成功しています。

$ sudo systemctl status wawawa

● wawawa.service - wawawa_shell
   Loaded: loaded (/etc/systemd/system/wawawa.service; enabled; vendor preset: disabled)
   Active: active (running) since 金 2018-03-16 23:44:03 UTC; 10s ago
 Main PID: 3323 (wawawa.sh)
   CGroup: /system.slice/wawawa.service
           ├─3323 /bin/bash /home/ec2-user/wawawa.sh
           └─3346 sleep 1

ファイルにも日時がリダイレクトされ続けています!

$ tail -F result.log 
Fri Mar 16 23:46:10 UTC 2018
Fri Mar 16 23:46:11 UTC 2018
Fri Mar 16 23:46:12 UTC 2018
Fri Mar 16 23:46:13 UTC 2018

おわりに

Systemdを利用して自分でつくったサービス(シェル)を登録することができました。
マシン起動時に自動でサービスが起動されますのでデーモンとして常駐させておきたいようなシェルスクリプトがあれば登録するのがいいと思います!!!

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識