首页 > 解决方案 > Rscript & rstan 作为 cron 作业运行时的不同行为

问题描述

我尝试定期运行 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,但如果我R CMD BATCH在 cron 作业中使用则不能。使用launchd会触发相同的问题。我也尝试过使用CmdStanthrough cmdstanr,同样的事情发生了:在添加到 cron 作业之前运行良好。

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

标签: rmacoscronrscriptstan

解决方案


看起来我终于设法解决了这个问题,我在这里为遇到同样问题的任何人发布我的解决方案。

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

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


推荐阅读