gpt4 book ai didi

python - 在 Ubuntu 中重新启动崩溃的 Python 脚本?

转载 作者:行者123 更新时间:2023-12-04 19:06:10 25 4
gpt4 key购买 nike

我最近一直在使用 AWS 的免费 Web 服务,通过 EC2 在云中运行 python 脚本。我将它设置为使用 Crontab 每天在特定时间开始运行,然后整天运行直到它重新启动。
我遇到的问题是程序很有可能会崩溃。我在程序上有一堆错误捕获 block ,但它们并不总能阻止崩溃。在它崩溃的情况下,我真正想要的是让它重新启动并重新上线,这样我就可以尽可能少地错过。但我不知道该怎么做。
我考虑过包括一堆 Crontab 实例来全天运行它,但这不会只是创建一堆我的脚本实例吗?是否有某种方法可以将其配置为仅在脚本当前未运行时才起作用?

最佳答案

如果它打算一直运行,并且您具有 sudo 访问权限,那么 systemd 可以为您执行此操作。它为您的设置增加了一些复杂性,但这是一个理想的用例。
这是一个示例 my_python.service文件:

[Unit]
Description=My Python Service

[Service]
Type=simple
WorkingDirectory=/where/it/runs/from
ExecStart=/usr/bin/python /path/to/script.py
User=notroot
Group=notroot
Restart=always

[Install]
WantedBy=multi-user.target
并非所有这些选项都是必需的,但这将满足您的需求,它将通过 journalctl -u my_python 提供日志记录。 .
一个一个地浏览它们:
  • Description= - 完全为了您的理智,并使其更加自我记录
  • [Service] - 描述 systemd 应该如何运行和控制进程的 block
  • Type= - 这是 fork 、套接字还是 systemd 应该期望什么样的执行行为。 9/10 这只是 SimpleWorkingDirectory= - (可选)仅指定应从何处运行程序。如果您依赖文件输入或生成文件输出,那么这将非常有用
  • StartExec= - 要运行的实际命令。它就像从终端运行它一样工作,除了它需要绝对路径,因此需要完整的/usr/bin/python。您可能想运行 which python确保您的路径正确
  • User=/Group= - 这可以防止它以 root 身份运行,这是一种很好的做法
  • Restart=always - 如果我的程序停止运行,我应该什么时候重新启动它?这是你想要的神奇部分,它将拥有 systemd为您监控该过程,并在失败时自动尝试重新启动它。如果无法再次启动,它将继续尝试,但会将尝试记录在 systemctl status my_python

  • 最后两行是为了让它在引导的最后阶段运行,你并不真的需要它们,但它很高兴拥有。当您希望在操作系统启动期间启动某些东西时,它会为您提供帮助。
    获得此文件后,将其放入 systemd的单元目录(​​ /usr/lib/systemd/system 用于 yum 系统)并运行以下命令:
  • systemctl daemon-reload - 在单元目录中查找新文件和文件更改
  • systemctl enable my_python - 或任何您命名的服务,这会使程序在启动时运行
  • systemctl start my_python - 这实际上运行您的程序并为您监控它。
  • 关于python - 在 Ubuntu 中重新启动崩溃的 Python 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69007628/

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