1. やりたいこと
ラズパイを自宅サーバーとして運用していますが、再起動する際にいくつかあるアプリについていちいちdocker compose upするのが面倒なので、systemdから自動起動するようにします
2. 技術選定
いろいろ比較した結果、systemd一択っぽいです
.bashrcを使う方法
ログインしないと実行されないので、単に電源が投入されただけでは動いてくれません。電源だけ入れた状態でもう動いていてほしいので今回はダメ
cron @rebootを使う方法
簡単ですがログ出力やエラー追跡が困難なようです
systemdを使う方法
再起動後に確実に実行できる、ログの出力方法や保存場所をサービス単位でカスタマイズできるなど、今回の用途に十分ですのでこれでいきたいと思います
3. 手順
以下の手順で設定します
・1.systemd serviceファイルを作成する
・2.serviceを有効にする
・3.serviceを開始する
3-1. systemd serviceファイルを作成する
/etc/systemd/system/に拡張子がserviceであるファイルを置くとsystemdサービスとして扱われます。今回はラズパイなのでnanoエディタで作成編集していきます
sudo touch etc/system/hoge.service
sudo nano etc/system/hoge.service
/hoge/ユーザー名/dev/hoge/docker-compose.yml を実行する場合、以下のように書きます。特に説明を受けなくても何をやっているか分かるのが良いですね
[Unit]
Description=Start hoge Docker Compose project at boot
After=network-online.target docker.service
Requires=docker.service
[Service]
Type=oneshot
WorkingDirectory=/home/ユーザー名/dev/hoge
ExecStart=/usr/bin/docker compose up --build -d
RemainAfterExit=true
[Install]
WantedBy=multi-user.target
3-2. サービスを有効にする
自動起動する為にはenableしておく必要があります
sudo systemctl daemon-reexec
sudo systemctl enable hoge
3-3. サービスを起動する
次回からシステムが起動するとサービスが実行されますが、現在は起動していない状態ですので以下コマンドで起動しておきます。ここで一度起動しておけば、作成したサービスに不具合があるなどした場合にすぐ分かります
sudo systemctl start rp5_sensor.service
まとめ
簡単ですね
レッツトライ