python - 当我使用 cron 运行时,在 Linux 服务器中找不到某些文件

标签 python linux ssh cron

我在 Linux 服务器中运行 python 脚本,当我使用 ssh 在远程终端上运行它们时,它们运行成功。但是,当我使用 crontab 文件运行命令时,它找不到服务器中安装的某些文件。当我使用 cron 运行脚本时有什么区别? cron 文件与我的 python 脚本位于同一目录中。我正在使用安装在 postgresql 安装文件夹中的“raster2pgsql”加载器。错误信息是:

sh: raster2pgsql: not found

我的 cron 文件内容是:

*/2 * * * *  /usr/bin/env python /home/testexe/LST.py >> /home/testexe/LST.log 2>&1

最佳答案

Cron 在比终端更“简单”的环境中运行命令。具体来说,它可能不包括 ~/.bashrc 或 ~/.bash_profile 或类似文件中完成的任何设置,其中通常包括将内容添加到 $PATH (或者在您的情况下可能是 $PYTHONPATH )。

您可能只需要在 cron 作业的前面设置一些环境变量,如下所示:

00 00 * * * PYTHONPATH=/foo/bar yourprog arg1...

编辑:现在问题中添加了内容,我想说尝试这样的事情:

*/2 * * * * PATH=/foo/bar /home/testexe/LST.py >> /home/testexe/LST.log 2>&1

您应该将/foo/bar 替换为包含错误消息中提到的 raster2pgsql 程序的目录。如果您不知道它在哪里,请尝试运行locate raster2pgsql

请注意,我故意删除了您那里的 /usr/bin/env python ——它应该放在脚本顶部的“shebang 行”中。这必须是文件的第一行,并且应该如下所示:

#!/usr/bin/env python

然后,只需 chmod +x/home/testexe/LST.py 将文件标记为可执行文件,您就可以运行它,而无需从外部显式调用 python - 无论是在 cron 中还是在终端中。

关于python - 当我使用 cron 运行时,在 Linux 服务器中找不到某些文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14957111/

相关文章:

python - 如何在Python中的 bool 数组中将某些True元素设置为False?

python - Zenmap 结果与自定义端口扫描不一致

linux - 如何删除 ~ 而不删除我的主目录?

可以使用 Netbeans + PHPUnit 在远程服务器上进行 PHP 单元测试吗?

python - 直接调用命令时 ssh 挂起,但交互运行时干净地退出

python - Logistic 回归 scikit-learn 与 statsmodels 的系数

python - 如何 Python 从包含分号的配置文件中打印一行?

python - 使用 Numpy 的成对 vdot

将 `ip tuntap add` system() 调用转换为 C 代码

ruby-on-rails - 突然无法推送到 heroku : "unable to negotiate key exchange method"