JD *_*ong 8 r amazon-ec2 amazon-web-services
我有一些工作流程,我希望R在完成脚本后暂停运行的Linux机器.我可以想到两种类似的方法来做到这一点:
system("halt")halt在R位完成后运行shell脚本.还有其他简单的方法吗?
这里的用例是针对在AWS上运行的脚本,我希望在脚本完成后实例停止,这样我就不会在作业运行后收取机器时间的费用.我用于数据分析的实例是一个EBS支持的实例,因此我不想终止它,只需暂停.从实例内部发出halt命令与从AWS控制台停止/挂起的效果相同.
我印象深刻,有效.(对于其他任何一个实例可以自行停止的人,请参阅注释1和2.)
您也可以尝试"sudo halt",因为只要运行R的用户帐户能够运行sudo,您就不需要以root用户身份运行.这在EC2上的很多AMI上很常见.
注意R退出的假设是什么 - 不管你信不信,可以崩溃R.最好有一个单独的脚本来监视R pid,一旦PID不再处于活动状态,就终止实例.在R内执行此命令意味着如果R崩溃,它永远不会到达停止的调用.如果你从另一个脚本中调用它,那也可能是危险的.如果您对Linux了解得很清楚,那么您要查找的是启动R的PID,您可以将其传递给另一个检查的脚本ps,例如每1秒一次,然后在PID不再运行时终止实例.
我认为更好的解决方案是使用EC2 API工具(请参阅:http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/获取文档)来终止或停止实例.这两者之间存在差异,如果您的实例是EBS支持或S3支持则很重要.您不需要以root用户身份运行以终止实例 - 事实上,您拥有私钥和证书会向亚马逊显示您是BOSS,远远高于仅在您的实例上拥有root访问权限的hoi polloi.
由于这些凭据可用于恶作剧,因此请注意从给定服务器运行API工具,您需要在服务器上使用证书和私钥.如果您遇到安全问题,这是个坏主意.最好是向主服务器发送消息并让它关闭实例.如果您在实例之间以任何方式设置了消息,那么这可以为您完成所有工作.
注1:埃里克·哈蒙德报告,该halt只挂起EBS实例,因此你还有保管费.如果你碰巧开始了很多这样的实例,这可能会让事情变得混乱.您的原始问题似乎不清楚您是否要终止或停止实例.他在这个页面上有其他好的建议
注2:EC2开发人员论坛上的一个简短帖子为Linux和Windows用户提供建议.
注3:即使重新启动,EBS实例也会按部分时间计费.(请参阅开发人员论坛中的此主题.)如果R进程无法正常工作,那么自动暂停接近小时标记会很有用,以防有人重新执行该实例(即保存不重启) .其他有用的工具需要考虑:setTimeLimit和setSessionTimeLimit各种检查点工具(我有一个Q 提到了一对).如果一个人的代码可能性能很差,那么使用auto-kill非常有用.
注4:我最近了解了shutdown包中的命令fun.这是多平台的.请参阅此博客文章以获取评论,代码在此处.危险的东西,但如果你想适应Windows,它可能是有用的.不过我还没试过.
更新1.还有三个想法:
.Last()和runLast = TRUE对q()和quit(),这可能关闭实例.  tcltk2有一个整洁的计时器机制,称为tclTaskSchedule()可以用来安排表达式的执行.然后你可能会在每小时间隔过去之前就执行一些东西而疯狂.| 归档时间: | 
 | 
| 查看次数: | 615 次 | 
| 最近记录: |