我按照this tutorial建立了一个非常简单的Telegram机器人。所以我有一个包含Python代码的文件,当我运行该代码时,机器人将回应我说的话。
只有当我打开Python并运行代码时,僵尸程序才能正常工作吗?这是否意味着我不能同时在Python中运行任何其他脚本,如果我希望我的机器人继续工作,也不能关闭Python?
有没有什么方法可以解决这个问题,以便机器人永远都在“#”上?
答案 0 :(得分:7)
Telegram bot是一个Python程序。当你运行它时,它会执行它应该做的事情,然后,如果你停止程序,机器人就会停止工作。问题在所有程序中都很常见,特别是在服务器上。想想Nginx,Apache,ssh等等。他们都是程序,他们都会在关闭时停止工作。
如果你想确保你的机器人总是运行,你必须守护它。有a lot of solutions。
您可以将脚本转换为守护程序,因此当您启动它时,它会直接进入后台并继续运行,直到服务器关闭(或程序崩溃)。但在这种情况下,如果您(或其他人)重新启动计算机(服务器),您的机器人会重新运行吗?为此目的有一些python库,如daemonize。
另一个常见的解决方案是在流程管理器中运行机器人。例如,您可以查看supervisorctl,或者您可以决定创建一个脚本,以便从System V,UpStart或Systemd运行您的程序...这假设您要部署您的机器人在专用服务器或VPS上。这将由tutoriel you followed:
的第3部分介绍本系列的下一部分和最后一部分将演示如何将Bot部署到VPS。
您还可以考虑将机器人封装到图像或容器(Docker等)中,以便在兼容的平台上运行它。
答案 1 :(得分:1)
至少在计算机上运行Python中的两个控制台应该没有问题。您的代码只应在计算机上打开Python时运行,这是正确的。正如Eli正确指出的那样,如果你想在本地托管,守护进程将是合适的。
然而,如果你想让它连续在线运行,那么困难之处就在于此。例如,使用Reddit机器人搜索并发布帖子评论,您需要通过一些基于云的服务来托管这些机器人。我建议使用Amazon Web Services,它提供免费试用版,为您提供足够的基本Python需求。有些人也会使用Heroku。你几乎可以保存当前Python窗口的状态,它会不断运行。
我会查看this帖子,了解如何在AWS中设置“屏幕”。