nohup python3 /home/pi/Recorder.py >> log.txt 2>&1 &
ModuleNotFoundError: No module named 'apscheduler'
。 1
jianixrabbit 2021-01-16 23:59:06 +08:00 via Android
看看脚本当时的环境变量
|
2
imes 2021-01-17 00:12:37 +08:00 via Android 1
有 systmd 不用,跑去用歪门邪道的 rc.local,出 bug 都难修。systemd 脚本如下,安装实际情况,修改用户和路径:
``` [Unit] Description=Python Service After=multi-user.target [Service] WorkingDirectory=/path/ User=root Type=idle ExecStart=/usr/bin/python3 /path/python.py Restart=always [Install] WantedBy=multi-user.target ``` |
3
farmer01 2021-01-17 08:16:58 +08:00
nohup /usr/bin/python3 /home/pi/Recorder.py >> log.txt 2>&1 &
|
4
nidongpinyinme OP @jianixrabbit 在脚本里打印了环境变量发现确实和终端执行时的不一样,少了三方库的路径,那么他读的是哪个变量呢
|
5
nidongpinyinme OP @imes 谢谢哥,给我推开了新世界的门
|
6
nidongpinyinme OP @farmer01 指定了也是不行,好像是脚本里面找不到 python 的三方库路径
|
7
nidongpinyinme OP @jianixrabbit 说的有点傻了,我是用 python 的 sys.path 打印的
|
8
exiledkingcc 2021-01-17 11:14:20 +08:00
你在终端里面运行的时候,会加载用户的一些环境变量。
在 rc.local 运行的时候,没有这些东西。 改成 systemd,然后把必要的 path 配置进去就行了。 或者用 python 虚拟环境。 |
9
no1xsyzy 2021-01-17 12:45:32 +08:00
现在 rc.local 也是靠 systemd 里一个 rc-local.service 来启动的…… 纯粹是向后兼容的目的留着的,没必要用
至于 sys.path 还是自己看文档吧: https://docs.python.org/3/library/sys.html#sys.path |
10
bao3 2021-01-17 15:32:34 +08:00 via iPhone
其实对于一般的需求,rc.local 很方便,也不理解为啥系统要取消
|
11
JamesMackerel 2021-01-17 17:30:52 +08:00
PYTHONPATH 环境变量了解一下。
|
12
nidongpinyinme OP @exiledkingcc 我改成 systemd 可以直接用 /叹气
|
13
nidongpinyinme OP @no1xsyzy 敬礼
|
14
farmer01 2021-01-17 18:42:04 +08:00
@nidongpinyinme 可以像 imes 说的,注册成系统服务,或者是在 crontab 里引用 PATH
|
15
imycc 2021-01-18 01:41:50 +08:00
py 依赖找不到的简单排错办法,启动的时候把 sys.path 打印出来,跟交互环境下的做对比。
常见的错误是系统存在多个 py 版本,执行的时候是另一个 py 。或者你安装库的时候加了--user,把库安装到$HOME/.local 下面去了,执行的时候环境不一样。 |
16
neroxps 2021-01-18 08:44:00 +08:00
2020 年了,还在用 rc.local
SYSTEMD 作者现在还活的好好的 |
17
nidongpinyinme OP @neroxps 学会了学会了
|
18
nidongpinyinme OP @imycc 是的,我这边是装库位置不对
|