我有一个小脚本,它使用 flask 监听 API 请求并将它们转发给 Home Assistant 和 InfluxDB。它目前有一个虚拟名称“script.py”,并放置在 /usr/local/bin 中。当我使用 独立运行它时,python3 script.py
它运行良好。
因为我希望这个脚本一直运行,所以我想把它作为一个服务。我在 /usr/local/etc/rc.d/ 中创建了以下服务
#!/bin/sh
# PROVIDE: rest
# REQUIRE: DAEMON NETWORKING
# BEFORE: LOGIN
# KEYWORD: shutdown
. "/etc/rc.subr"
location="/usr/local/bin"
name="script"
rcvar=rest_enable
: ${rest_enable:="YES"}
logfile="/var/log/rest/${name}.log"
command="$location/$name.py"
command_args="$1"
command_interpreter="/usr/local/bin/python3"
load_rc_config $name
run_rc_command "$1"
输出为
Starting script.
Traceback (most recent call last):
File /usr/local/bin/script.py", line 4, in <module>
from flask import Flask, request, Response
ModuleNotFoundError: No module named 'flask'
/usr/local/etc/rc.d/rest: WARNING: failed to start script
在 python3 上运行 whereis 会产生以下内容:
root@grafana:/usr/local/etc/rc.d # whereis python3
python3: /usr/local/bin/python3
所以从我的理解来看,这应该没问题。我遗漏了什么?
答案1
大致来说有三种选择:
- 您已通过运行以下命令以用户身份安装了 flask
pip3 install flask
- 作为用户,您有一个虚拟环境。
在系统范围内安装 flask 模块,在脚本中指定 flask 的绝对路径,或者设置适当的 venv。