我运行一个使用 Python 脚本收集数据的记录器。目前使用 tmux,因此我可以分离并关闭 ssh 隧道。我希望它在系统启动时启动。
我已经关注了这个食谱严格来说,只是我没有插入示例 Python 脚本,而是插入了我自己的脚本。除此之外,我完全遵循它,甚至包括脚本和目录名称等。
这是配方(因为外部引用可能会丢失):
创建一个 Systemd 条目
sudo nano /etc/systemd/system/myapp.service
[Unit] # After=network.service Description=My App [Service] Type=simple # WorkingDirectory=/code/python/myapp ExecStart=/code/scripts/myapp.sh # User=do-user [Install] WantedBy=multi-user.target # WantedBy=default.target
创建 Bash 脚本
nano /code/scripts/myapp.sh
#!/bin/bash # cd /code/python/myapp python3 /code/python/myapp/run.py >> /code/logs/myapp.log 2>&1 mkdir /code/logs
创建 Python 脚本
nano /code/python/myapp/run.py
import signal import time import datetime is_shutdown = False def stop(sig, frame): print(f"SIGTERM at {datetime.datetime.now()}") global is_shutdown is_shutdown = True def ignore(sig, frsma): print(f"SIGHUP at {datetime.datetime.now()}") signal.signal(signal.SIGTERM, stop) signal.signal(signal.SIGHUP, ignore) print(f"START at {datetime.datetime.now()}") while not is_shutdown: print('.', end='', flush=True) time.sleep(1) print(f"END at {datetime.datetime.now()}")
测试系统
设置文件权限
sudo chmod 744 /code/scripts/myapp.sh
sudo chmod 664 /etc/systemd/system/myapp.service
启用服务
sudo systemctl daemon-reload
sudo systemctl enable myapp.service
测试服务
sudo systemctl start myapp.service
检查状态
sudo systemctl start status.service
检查日志
tail -f /code/logs/myapp.log
但是,当我尝试启动该服务时,出现此错误:
$ sudo chmod 744 /code/scripts/myapp.sh
$ sudo chmod 664 /etc/systemd/system/myapp.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable myapp.service
$ sudo systemctl start myapp.service
$ sudo systemctl start status.service
Failed to start status.service: Unit status.service not found.
$ tail -f /code/logs/myapp.log
...
位于的日志/code/logs/myapp.log
为空。在之前的尝试中,日志包含模块导入错误。我稍微更改了脚本,此后日志仍为空。
这是我在运行记录器的边缘设备上使用的操作系统:
Ubuntu 18.04.5 LTS(GNU/Linux 4.15.0-147-通用 x86_64)
知道我做错了什么吗?