使用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
最后
简洁明了。这个……记不住。