r - 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
会触发相同的问题。我也尝试过使用CmdStan
through cmdstanr
,同样的事情发生了:在添加到 cron 作业之前运行良好。
编辑 2:我认为在 cron 中运行良好的模型实际上并不好。结果是错误的,直到我使用下面解释的修复程序。
解决方案
看起来我终于设法解决了这个问题,我在这里为遇到同样问题的任何人发布我的解决方案。
我env
在终端中运行以查看我当前的用户环境。我将完整的输出复制粘贴到我的 crontab 文件的顶部。(仅仅添加 PATH 变量是不够的。我想是 SHELL 或者可能是 PATH 和 SHELL 都起到了作用,但我没有进一步探索。)
要编辑我的用户的 crontab,我运行crontab -e
,然后按i
编辑文件,粘贴文件env
顶部的所有内容,按 停止编辑ctrl + c
,然后键入:wq
并按 Enter 退出。
推荐阅读
- php - Laravel HTMLPurifier 过滤 base64 编码图像
- express - 添加猫鼬模式模型来表达导致错误500
- .net - 样式资源取决于字符串变量
- php - 使用 SQLite 在 laravel 中的身份验证问题
- r - 列数未知的 Expand.grid
- javascript - TypeError undefined 不是函数
- javascript - 递归创建所有可能的数字组合?
- python - 在一行上查找一个字符串并返回找到的字符串正下方的字符串 - Python 或 UNIX
- android - 如何符号化 AddressSanitizer 堆栈跟踪?
- python - Selenium 与 Python:如何在具有已知类的元素中选择标签