1Panel-dev / 1Panel

🔥 #1 Rated Web-based Linux Server Management Tool. / 现代化、开源的 Linux 服务器运维管理面板。
https://www.1panel.cn
GNU General Public License v3.0
22.9k stars 2.08k forks source link

[BUG]计划任务环境丢失问题 #6919

Open JAINKRE opened 1 week ago

JAINKRE commented 1 week ago

联系方式

No response

1Panel 版本

v1.10.20-lts

问题描述

昨天晚上发起了一个QA:https://github.com/1Panel-dev/1Panel/discussions/6914 本来以为使用绝对路径解决了,但是今天早上发现并没有。

在计划任务中,使用node绝对路径可以正常运行,但是使用npm则不可以: image

而在终端中运行则没问题: image

重现步骤

python测试脚本如下:

import os
os.system("pwd")
os.system("which python312")
os.system("which node")
os.system("which npm")
print(os.path.exists("/usr/local/node/bin/node"))
print(os.path.exists("/usr/local/node/bin/npm"))
os.system("cd /usr/local/node && ls -a")
os.system("cd /usr/local/node/bin && ls -a")
os.system("/usr/local/node/bin/node -v")
os.system("/usr/local/node/bin/npm -v")

其中,python312是python3.12版本的软连接

期待的正确结果

可以确定是计划任务运行的环境问题,上午我们从新使用docker编译了一个环境,使用相同的rockylinux8.9,包含node22.9和python3.12作为容器运行脚本,结果测试运行正常: image

但显然这样子很复杂且不利于后期维护,希望社区可以尽快定位问题原因并修复,十分感谢!

相关日志输出

No response

附加信息

No response

wanghe-fit2cloud commented 1 week ago

可以确定这还是环境变量加载的问题。目前你可以试试通过在脚本最上方来显式设置 PATH ,如:

export PATH=$PATH:/usr/local/bin:/usr/bin:/your-node-path
JAINKRE commented 1 week ago

如果我没理解错的话,这样设置了: image

运行结果: image

显然还是不行,可以看到export确实生效了

下面是没有设置之前的: image

我觉得可能不是显式设置 PATH的问题,如果环境有问题应该node也无法生效,现在node生效目录下的npm却不生效(只在计划任务中报错),就很奇怪。而且,which命令也同时无法获得ndoenpm本机的地址。

是不是因为1panel是容器安装,而我node是直接在终端中原生安装导致的?但问题同样原生安装的python却可以正常which获取。

现在问题可能有两个方向:

等明天周末我重新排查一下node,找个新机器重试一下看看能不能复现。