使用systemd创建服务(在Ubuntu启动时处理)

首先

在树莓派启动时,我遇到了在Ubuntu上创建FastAPI服务的难题。虽然只是个备忘录,但记录了一系列步骤。

使用过的环境

    • Description: Ubuntu 22.04.3 LTS

 

    RaspberryPi 4B

步骤一:选择启动方法

Ubuntu可以采取的手段有三种:rc.local、init.d、systemd。这次选择了systemd。

步骤2:准备shell文件。

用一行代码写出执行py文件的命令

cd /home/ubuntu/python/homeAPI; python3 main.py

给 shell 文件添加执行权限

chmod +x /home/ubuntu/python/homeAPI/start.sh

第三步骤:创建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文件不可以。只有使用ExecStart=/bin/sh hoge.sh才能正常工作。

第四步,确认服务

确认服务开始和服务状态。

sudo systemctl daemon-reload
sudo systemctl start bootstrap
sudo systemctl status bootstrap.service

控制台输出(正常情况下)

● 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。由于日志很长,建议使用时间戳进行搜索。

less /var/log/syslog

失败例:忘记了/bin/sh或者没有执行权限等。

第五步:注册Service

如果确认已经开始了无事服务,就注册该服务。
解除时则是禁用。

sudo systemctl enable bootstrap

最后

简洁明了。这个……记不住。