创建一个 Systemd 条目

创建一个 Systemd 条目

我运行一个使用 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)

知道我做错了什么吗?

相关内容