<p>这是一个非常常见的<code>cron</code>问题</p>
<p>交互式运行和cron运行的环境不同。
这会导致观察到的故障</p>
<p>我假设您向我们展示了<code>crontab -l</code>作为同一个用户运行
以交互方式运行脚本,
因此,例如,我们与在cron下运行它的<code>root</code>没有差异</p>
<p>您的<code>$PWD</code>当前的工作目录可能很重要。
许多cron作业将执行以下操作:</p>
<pre><code>cd some_dir && ./my_script.zsh
</code></pre>
<p>引用第5章crontab手册页:</p>
<blockquote>
<p>... HOME, SHELL, and PATH may be overridden by settings in the crontab ...</p>
<p>... the environment handed to child processes is basically the one from /etc/rc.</p>
</blockquote>
<p>您<em>真的</em>希望在执行脚本之前美化环境</p>
<p>至少我想你需要</p>
<pre><code>env PYTHONPATH=. /Users/myname/myzsh.zsh
</code></pre>
<p>许多<em>my</em>脚本建立了一个<a href="https://anaconda.org/conda-forge" rel="nofollow noreferrer">conda</a>环境
在调用cPython之前,
所以<code>$PATH</code>是好的。
只运行<code>env | sort >> /tmp/log.txt</code>的cron作业
查看默认情况下的路径。
尝试以交互方式使用该路径设置,然后
您可能会注意到脚本的失败与在cron下的失败相同</p>
<p>你会发现埋葬<code>cd dir</code>和<code>export PATH=...</code>很方便
在myzsh.zsh脚本中</p>
<P>考虑运行^ {< CD9>}以帮助调试{{< CD10}}详细信息。<p>
<hr/>
<p>您的脚本可能出现致命错误,退出状态为非零。
作为调试的辅助工具,考虑添加</P>
<pre><code>MAILTO=prolle@some.email.provider.com
</code></pre>
<p>然后<code>cron</code>守护进程将向您发送脚本的输出,
如果它在stdout+stderr上生成的行数超过零</p>