はじめに
raspi起動時にFastAPIを立ち上げるにあたって、
Ubuntuのサービス作成で詰まった。
メモ的だが、色々と手順をつらつら。
使った環境
- Description: Ubuntu 22.04.3 LTS
- RaspberryPi 4B
Step.1 起動方法選択
ubuntuで取りうる手段は3つ。・・・rc.local、init.d、systemd
⇒今回はsystemdを選択
Step.2 shellファイルを準備
ワンライナーでpyファイル実行まで書く
/home/ubuntu/python/homeAPI/start.sh
cd /home/ubuntu/python/homeAPI; python3 main.py
shellファイルに実行権限を付与する
bash
chmod +x /home/ubuntu/python/homeAPI/start.sh
Step.3 Serviceファイル作成
/etc/systemd/system/bootstrap.service
[Unit]
Description=bootstrap service
After=network.target
[Service]
User=ubuntu
ExecStart=/bin/sh /home/ubuntu/python/homeAPI/start.sh
Restart=no
Type=simple
[Install]
WantedBy=multi-user.target
単にshellファイル作成ではNG。ExecStart=/bin/sh hoge.sh
で書かないと動かず。IoTなどネットワーク前提のServiceの場合は、After=network-online.target
にする。(ネットワーク疎通できてないのにService起動してしまい、ハマった)
Step.4 Service確認
サービス開始、サービスステータスを確認
bash
sudo systemctl daemon-reload
sudo systemctl start bootstrap
sudo systemctl status bootstrap.service
コンソール出力(正常時)
bash
● bootstrap.service - bootstrap service
Loaded: loaded (/etc/systemd/system/bootstrap.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2023-10-28 11:01:27 UTC; 24min ago
Main PID: 717 (sh)
Tasks: 3 (limit: 4416)
Memory: 57.5M
CPU: 9.415s
CGroup: /system.slice/bootstrap.service
├─717 /bin/sh /home/ubuntu/python/homeAPI/start.sh
└─742 python3 main.py
#以下省略
失敗時はsyslogを確認。ログが長いのでタイムスタンプで探すと良い。
bash
less /var/log/syslog
失敗例:/bin/sh
を忘れていたり、実行権限が無いなど。
Step.5 Serviceを登録
無事サービスの開始が確認出来たら、サービスを登録する。
解除時はdisable。
bash
sudo systemctl enable bootstrap
最後に
簡潔にまとまった。これは・・・覚えてられない。