在共享主机中为cron作业设置PYTHONPATH

时间:2016-07-15 21:23:22

标签: python cron shared-hosting

我在共享主机(bluehost)上运行我的python脚本时出现问题,并且在其他SO线程的帮助下,我能够设置PYTHONPATH并运行脚本没有问题。

现在我需要通过cron作业运行脚本。共享托管环境中的cron作业只是我可以调用脚本的一行,但在调用脚本之前无法弄清楚如何设置PYTHONPATH。

示例:

python /path/to/my/script.py

我确信这个问题应该很常见,但我在其他帖子中找不到任何答案。

知道如何为cron作业设置PYTHONPATH吗?

此外,代码库是在本地环境中开发的,服务器通过git pull获取副本。所以我的首选解决方案是不更改服务器的源代码。可以从cron job调用另一个脚本来调用主脚本并在那里设置变量,但更改主脚本我不希望发生这样我不需要为本地维护两个版本的代码,一个用于本地服务器。

2 个答案:

答案 0 :(得分:9)

更改您的cron作业以运行shell脚本。在shell脚本中,设置PYTHONPATH,然后调用python程序。

将您的cron作业更改为:

/path/to/my_shell_script.sh

my_shell_script.sh的内容:

export PYTHONPATH=something
python /path/to/py/python/program.py

如果您不想拥有单独的shell脚本,可以将它全部塞入cron条目,尽管它可能会很长:

PYTHONPATH=something python /path/to/py/python/program.py

答案 1 :(得分:-1)

如果在 bashrc 中设置了 PYTHONPATH 变量或在登录时设置了其他环境变量,您也可以使用 runuser。例如

 * * * * * root /sbin/runuser -l <USER> -c '<SOME PYTHON SCRIPT>'

将在 root 用户下每分钟运行一次,但使用登录 shell 来运行脚本。

来自 runuser 手册页:

   -, -l, --login
          make the shell a login shell, uses runuser-l PAM file instead of default one

   -c, --command=COMMAND
          pass a single COMMAND to the shell with -c