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

Set PYTHONPATH for cron jobs in shared hosting

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

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

示例:

python /path/to/my/script.py

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

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

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

将您的 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

如果在您的 bashrc 中设置了 PYTHONPATH 变量,或者在登录时设置了环境变量的其他地方,您也可以使用 运行user。例如

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

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

来自 运行 用户手册页:

   -, -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