为共享主机中的 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
我在共享主机 (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