Crontab 尝试时头痛 Python
Crontab Headaches when trying Python
我已经成功 运行 一个 crontab,但是当我引入一个 python 脚本时,没有任何反应。我已经验证我的 python 文件在 运行 直接来自 shell.
时有效
crontab 是:
* * * * * /Users/myname/myzsh.zsh
其中 myzsh.zsh 是:
#!/bin/zsh
/Users/mypath_to/python /Users/myname/testscript.py
什么都没发生
这是一个很常见的 cron
陷阱。
交互式 运行 和 cron 运行 之间的环境不同。
这会导致观察到的故障。
我假设您向我们 crontab -l
运行 展示了同一用户
运行 交互式脚本,
所以我们不与 root
有差异 运行 在 cron 下使用它。
您的 $PWD
当前工作目录可能很重要。
许多 cron 作业会做这样的事情:
cd some_dir && ./my_script.zsh
引用第 5 章 crontab 手册页:
... HOME, SHELL, and PATH may be overridden by settings in the crontab ...
... the environment handed to child processes is basically the one from /etc/rc.
你真的想在执行脚本前美化一下环境
我猜你至少需要
env PYTHONPATH=. /Users/myname/myzsh.zsh
许多 my 脚本设置了 conda 环境
在调用 cPython 之前,
所以 $PATH
很好。
运行 简单的 cron 作业 env | sort >> /tmp/log.txt
查看默认情况下 PATH 的样子。
尝试以交互方式使用该 PATH 设置并
您可能会注意到脚本失败与在 cron 下一样。
您可能会发现埋葬 cd dir
和 export PATH=...
很方便
在 myzsh.zsh 脚本中。
考虑 运行宁 python -m site
以帮助调试 sys.path
细节。
您的脚本可能正在退出并出现致命错误,退出状态为非零。
作为调试的辅助工具,考虑添加
MAILTO=prolle@some.email.provider.com
然后 cron
守护程序将向您发送脚本的输出,
如果它在 stdout + stderr 上产生多于零行。
原来 cron 本身没有权限。我将它拖放到首选项的安全部分,瞧!
我已经成功 运行 一个 crontab,但是当我引入一个 python 脚本时,没有任何反应。我已经验证我的 python 文件在 运行 直接来自 shell.
时有效crontab 是:
* * * * * /Users/myname/myzsh.zsh
其中 myzsh.zsh 是:
#!/bin/zsh
/Users/mypath_to/python /Users/myname/testscript.py
什么都没发生
这是一个很常见的 cron
陷阱。
交互式 运行 和 cron 运行 之间的环境不同。 这会导致观察到的故障。
我假设您向我们 crontab -l
运行 展示了同一用户
运行 交互式脚本,
所以我们不与 root
有差异 运行 在 cron 下使用它。
您的 $PWD
当前工作目录可能很重要。
许多 cron 作业会做这样的事情:
cd some_dir && ./my_script.zsh
引用第 5 章 crontab 手册页:
... HOME, SHELL, and PATH may be overridden by settings in the crontab ...
... the environment handed to child processes is basically the one from /etc/rc.
你真的想在执行脚本前美化一下环境
我猜你至少需要
env PYTHONPATH=. /Users/myname/myzsh.zsh
许多 my 脚本设置了 conda 环境
在调用 cPython 之前,
所以 $PATH
很好。
运行 简单的 cron 作业 env | sort >> /tmp/log.txt
查看默认情况下 PATH 的样子。
尝试以交互方式使用该 PATH 设置并
您可能会注意到脚本失败与在 cron 下一样。
您可能会发现埋葬 cd dir
和 export PATH=...
很方便
在 myzsh.zsh 脚本中。
考虑 运行宁 python -m site
以帮助调试 sys.path
细节。
您的脚本可能正在退出并出现致命错误,退出状态为非零。 作为调试的辅助工具,考虑添加
MAILTO=prolle@some.email.provider.com
然后 cron
守护程序将向您发送脚本的输出,
如果它在 stdout + stderr 上产生多于零行。
原来 cron 本身没有权限。我将它拖放到首选项的安全部分,瞧!