当 Rscript 和 rstan 运行 作为 cron 作业时的不同行为

Different behavior when Rscript & rstan is run as a cron job

我尝试 运行 定期使用 R 脚本来更新网页。从这样的终端调用脚本 运行 没问题:

/usr/local/bin/Rscript /Users/me/path/myscript.R

但是,如果我尝试 运行将其作为 cron 作业,则会出现错误。我像这样将作业添加到 crontab:

46 10 * * * /usr/local/bin/Rscript '/Users/me/path/myscript.R'  >> '/Users/me/path/mylog.log' 2>&1

脚本在 R 中执行 运行,但由于错误而中止。具体来说,我使用 rstan 拟合了一些模型,并得到了一个初始化错误。 (该错误仅适用于某些模型,而其他模型仍然 运行 正常。)初始化值根据定义是有效的,但似乎没有正确使用。这就像 rstan 在通过 cron 运行 时以不同的方式(而且是错误的)进行数学计算。

无论我 运行 终端中的脚本还是作为 cron 作业,来自 R 的会话信息都是相同的。我的问题是,根据脚本的不同,还有什么可能会有所不同 运行。当 运行 作为 cron 作业时,rstan 可以使用不同版本的 C++ 吗?我可能需要设置其他路径才能使其正常工作吗?

更新:如果我 运行 它在终端中使用 R CMD BATCH,该脚本也有效,但如果我在 cron 作业中使用 R CMD BATCH 则无效。使用 launchd 会触发相同的问题。我还尝试使用 CmdStancmdstanr,同样的事情发生了:在添加到 cron 作业之前运行良好。

编辑 2:我认为 运行 在 cron 中很好的模型,实际上并不好。结果是错误的,直到我使用下面解释的修复方法。

看来我终于设法解决了这个问题,我将我的解决方案发布在这里供遇到相同问题的任何人使用。

I 运行 env 在终端中查看我当前的用户环境。我将完整的输出复制粘贴到我的 crontab 文件的顶部。 (仅仅添加 PATH 变量是不够的。我想是 SHELL 或 PATH 和 SHELL 都起作用了,但我还没有进一步探讨这个问题。)

为了编辑我用户的 crontab,我 运行 crontab -e,然后按 i 编辑文件,将 env 中的所有内容粘贴到文件顶部,按 ctrl + c 停止编辑,输入 :wq 并按回车键退出。