-1

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

sh: raster2pgsql: not found

我的 cron 文件内容是:

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

1 回答 1

4

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 还是在终端中。

于 2013-02-19T12:11:10.933 回答