【问题标题】:Automate daily python process on remote server for improved reliability自动化远程服务器上的日常 python 进程以提高可靠性
【发布时间】:2023-04-06 20:57:01
【问题描述】:

我有一个每天通过计划任务在本地运行的 python 脚本。大多数时候,这很好——除非我在度假并且运行它的计算机需要手动重新启动。或者当我的互联网/电源关闭时。

我有兴趣把它放在某种租用的服务器时间上。我在这方面完全是新手(从未有过这样的生产型流程)。我找不到任何似乎解决此类用例的教程。我将如何安装我的 python 环境以及脚本需要的任何配置、数据文件或程序(例如,它会进行一些网络抓取并使用带有定义的用户配置文件的无头 chrome)。

鉴于程序的性质,是否可以或是否需要获得一个专用服务器,其环境可以更好地设置以满足我的特定需求?该过程每天运行大约 20 秒。

【问题讨论】:

    标签: python remote-server


    【解决方案1】:

    如果脚本只运行 20 秒并且您不担心可扩展性,那么如果您手头有硬件,直接在 NAS 或 raspberry 上运行它可能是私有环境的解决方案。

    如果您没有可用的必要硬件,您可能想看看提供免费版本的 PythonAnywhere。

    https://help.pythonanywhere.com/pages/ScheduledTasks/

    https://www.pythonanywhere.com/

    但是,在任何专业环境中,我都会选择像 Apache Airflow 这样的工具。您的“它进行一些网络抓取并使用带有定义的用户配置文件的无头 chrome”的过程描述了 ETL 工作流程。

    https://airflow.apache.org/

    【讨论】:

    • 谢谢。我会读这两个。知道从哪里开始非常有帮助。我有一个可以使用的 NAS。然而,它也在我家,并且似乎受到我的互联网/电力同样变幻莫测的影响。我在这里错过了什么吗?
    • 我想说气流对于这种情况来说有点过度工程......
    • @ChrisMcL 这真的取决于您的设置。在这种情况下,我建议您查看 PythonAnywhere。我自己使用带有 Docker 容器的 Synology NAS。它每天至少运行几个小时 - 这足以运行我的脚本。
    【解决方案2】:

    为 20 多岁的工作设置一个完整的专用服务器确实不是最佳选择。我看到了几个选项:

    • 获取基于云的虚拟机,该虚拟机仅在运行您的进程时才会启动和停止。这在 Azure、GCP 和 AWS 上相对容易实现自动化。
    • Docker 化应用程序以及整个环境并将其作为镜像运行在云上 - 例如在 Beanstalk (AWS) 或 App Service (Azure) 等服务上 - 这更复杂,但应该更便宜,因为它消耗的资源更少
    • 在 Digital Ocean、Heroku 或 pythonanywhere.com 等服务上获取专用 VM(droplet?) - 根据脚本的具体情况,设置起来可能非常简单且便宜。对于新手来说,这是我认为最简单、最灵活的解决方案,但它确实取决于您的脚本 - 您可能会遇到一些限制。

    在设置环境方面 - 有多种选择,最常用的是:

    • pyenv(我的首选)
    • anaconda(很容易使用)
    • virtualenv / venv

    为了有效地重新创建您的环境,您需要提供一个依赖项列表(您的脚本使用的库)。

    步骤总结:

    1. 在本地运行$pip freeze > requirements.txt
    2. 通过删除脚本未使用的所有包来手动编辑 requirements.txt 文件
    3. 通过 pyenv、anaconda 或 venv 创建一个新的虚拟环境,并在要运行脚本的任何位置激活它
    4. 将您的脚本和 requirements.txt 复制到新位置
    5. 运行$pip install -r requirements.txt 安装库
    6. 确保脚本在新位置按预期工作
    7. 设置cornjob

    【讨论】:

    • 非常感谢您详尽的撰写。设置 VM 或 VM Droplet 是否意味着我可以在 VM 上执行安装软件和存储文件等操作?如果是这样,我会在 VM 上重新创建我的安装包吗? Dockerizing 就像编译一样?
    • 1. VM 使您能够在本地机器上做任何可以做的事情,包括。安装软件广告存储文件。 2. Dockerizing 更倾向于每次创建 100% 相同的环境。它是一种独立的技术 (docker.com),因此您需要单独学习。
    猜你喜欢
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多