使用启动脚本在谷歌云虚拟机上启动python机器人

2024-05-18 12:04:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个公告机器人,为了一个公告而整天运行它是一种浪费。所以我试图安排服务器的启动,启动我的bot,在启动时通知它需要什么,然后安排5分钟后关机,当它确实完成了。我已经安装了所需的库并将代码复制到VM。如果我试着以正常的方式运行,输入“python3mybot.py”,它就会工作。我也尝试过在tmux中运行它,它在那里也可以工作。问题是我不能用启动脚本启动它。到目前为止,我对bash了解不多,我已经尝试过:

  1. 只是移动到文件夹并正常执行它
#! /bin/bash
cd home/user
python3 bot.py
  1. 移动到文件夹并通过本地bash文件执行,其中包含命令
#! /bin/bash
cd home/user
chmod +x run.sh
./run.sh
  1. 以相同的方式启动tmux会话并运行bot,但是当我连接ssh时,它不在活动会话列表中

我还尝试创建文件夹,检查它是否执行,我是否在正确的位置,文件夹是否显示在我想要的位置。尽管它似乎试图在根目录下执行代码,尽管在我移动到的位置创建了文件并完成了正确的bash文件。也可能是因为它是一个机器人,所以它是一个连续的代码,不像脚本?我也检查过类似的帖子,但无法完全理解/让它们发挥作用

感谢您的帮助


Tags: 文件代码py脚本文件夹bashhomebin
1条回答
网友
1楼 · 发布于 2024-05-18 12:04:36

最新答案

我认为在你的情况下,在GCE上运行它可能比我建议的GAE更好

在这种情况下,您有几种选择,但我的建议是:

  1. 创建一个脚本,如startup.sh。将文件保存在/etc/init.d/目录中。更改脚本的权限(使其可执行):chmod +x /etc/init.d/mystartup.sh。让这个脚本调用你的py文件

  2. 编辑/rc.local脚本。在Ubuntu中,这个文件位于/etc/rc.local。您需要使用sudo来编辑这个。将python3 path/to/file/bot.py放在这个文件的底部,它将在启动时执行。要获得确切的路径,请导航到该路径并键入pwd。您可能需要再次检查bot.py是否仍然可以加载正在加载的任何内容

如果要关闭bot.py末尾的VM,可以在py文件末尾添加以下内容:

import os
os.system('shutdown')

这将给您60秒的标准时间来停止关机。(它只是执行shell shutdown命令)
如果您没有足够的时间取消关机,自动关机可能会有点麻烦


原始答案

根据你的机器人的实际功能(announcement不是很好的描述),你最好使用免费的应用程序引擎,再加上一个cron job在设定的时间执行你的python

在前面抛出一个简单的flask应用程序来处理传入的cron作业请求

另外,在GAE firewall上阻止除requests from cronjobs之外的所有内容,以确保只有cronjob可以通过。为了绝对确保请求来自您的GAE cronjob,您可以检查是否存在正确的头

main.py

from flask import Flask

app = Flask(__name__)

@app.route('/my/awesome/cronjob')
def my_bot_code():
    # your code goes here, or you can simply import & call your bot.py from here
    return 'im a bot'

应用程序yaml

runtime: python39

instance_class: F1
entrypoint: gunicorn -b :$PORT main:app

automatic_scaling:
  max_instances: 1

handlers:
- url: /.*
  secure: always
  redirect_http_response_code: 301
  script: auto

cron.yaml

cron:
- description: "daily summary job"
  url: /my/awesome/cronjob
  schedule: every day 09:00

相关问题 更多 >