我在 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/