gpt4 book ai didi

r - 让 R 停止它正在运行的 EC2 机器

转载 作者:行者123 更新时间:2023-12-04 07:27:48 25 4
gpt4 key购买 nike

我有一些工作流程,我希望 R 在脚本完成后停止运行它的 Linux 机器。我可以想到两种类似的方法来做到这一点:

  • 以 root 身份运行 R 然后调用 system("halt")
  • 从 root shell 脚本运行 R(可以作为任何用户运行 R 脚本)然后让 shell 脚本运行 halt R位完成后。

  • 还有其他简单的方法可以做到这一点吗?

    这里的用例适用于在 AWS 上运行的脚本,我希望实例在脚本完成后停止,这样我就不会因作业运行后的机器时间而收费。我用于数据分析的实例是 EBS 支持的实例,因此我不想终止它,只需挂起即可。从实例内部发出暂停命令与从 AWS 控制台停止/暂停的效果相同。

    最佳答案

    我印象深刻。 (对于其他对实例可以自行停止感到惊讶的人,请参阅注释 1 和 2。)

    您也可以尝试“sudo pause”,因为您不需要以 root 用户身份运行,只要运行 R 的用户帐户能够运行 sudo。这在 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:埃里克·哈蒙德 reports halt只会暂停一个 EBS 实例,因此您仍然需要支付存储费用。如果您碰巧启动了很多这样的实例,这可能会使事情变得困惑。您最初的问题似乎不清楚您是要终止还是停止实例。他还有其他好的建议on this page

    注 2:A short thread on the EC2 developers forum为 Linux 和 Windows 用户提供建议。

    注意 3:EBS 实例按部分小时数计费,即使重新启动也是如此。 (请参阅 this thread from the developer forum 。)在接近小时标记的自动挂起可能很有用,假设 R 进程不工作,以防有人可能重新分配该实例(即节省不重新启动)。其他需要考虑的有用工具:setTimeLimitsetSessionTimeLimit ,以及各种检查点工具(我有一个 Q 是 mentions a couple )。如果代码有潜在的不良行为,则使用自动终止很有用。

    注4:我最近了解到shutdown包中的命令 fun .这是多平台的。见 this blog post用于评论,代码为 here .危险的东西,但如果你想适应 Windows,它可能很有用。不过我没试过。

    更新 1。另外三个想法:

  • 您可以使用 .Last()runLast = TRUEq()quit() ,这可能会关闭实例。
  • 如果使用 littler 或通过 Rscript 调用脚本的脚本,则可以使用相同的命令行函数。
  • 我今天最喜欢的包,tcltk2有一个简洁的计时器机制,称为 tclTaskSchedule()可用于调度表达式的执行。然后,您可能会在每小时间隔过去之前对执行内容感到疯狂。
  • 关于r - 让 R 停止它正在运行的 EC2 机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7273616/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com