我用Python写了一个机器人。 它会定期停止工作。 虚拟机运行稳定。 正在运行的服务始终处于活动状态。
我正在使用此库 - https://github.com/eternnoir/pyTelegramBotAPI
在Azure服务(Ubuntu 16.04.5)上的虚拟机上运行。
这是Python脚本代码:
# -*- coding: utf-8 -*-
import re
import config
import telebot
bomg = "Бомж"
regRusLetters = re.compile("^[а-яА-Яё]+$")
bot = telebot.TeleBot(config.token)
def second_vowels(text):
pos = 0
i = 1
while i < len(text):
if text[i] in "ауоыиэяюёе":
pos = i
break
i = i + 1
return pos
@bot.message_handler(commands=['start', 'help'])
def send_welcome(message):
bot.reply_to(message, "Пришли мне слово на Русском и я его бомжирую!")
@bot.message_handler(content_types=["text"])
def repeat_all_mesages(message):
response = "не могу бомжировать..."
text = message.text.lower()
if re.match(regRusLetters, text):
pos = second_vowels(text)
response = bomg + text[pos:]
bot.send_message(message.chat.id, response)
bot.polling(none_stop=True)
使用systemd配置为服务。这是bot.service文件:
[Unit]
Description=TelegramBot
After=network.target
[Service]
Type=idle
ExecStart=/usr/bin/python3.5 /home/rhanza/TelegramBot/bot.py
Restart=always
[Install]
WantedBy=multi-user.target
当我通过ssl连接并检查进程的状态时,我看到以下内容:
status bot.service
● bot.service - TelegramBot
Loaded: loaded (/etc/systemd/system/bot.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-12-16 21:06:31 UTC; 3min 8s ago
Main PID: 3823 (python3.5)
Tasks: 4
Memory: 19.2M
CPU: 930ms
CGroup: /system.slice/bot.service
└─3823 /usr/bin/python3.5 /home/rhanza/TelegramBot/bot.py &
Dec 16 21:06:31 botholder1 systemd[1]: bot.service: Service hold-off time over, scheduling restart.
Dec 16 21:06:31 botholder1 systemd[1]: Stopped TelegramBot.
Dec 16 21:06:31 botholder1 systemd[1]: Started TelegramBot.
虽然服务稳定,但机器人并不总是响应消息。 我无法弄清楚原因是什么以及如何解决问题。 也许有人可以说出答案?
答案 0 :(得分:0)
电报服务器会在长时间播放时定期向您发送504(网关超时)错误。
使用webhook,而不是长时间播放。
答案 1 :(得分:0)
尝试为长轮询增加timeout
:
bot.polling(none_stop=True, timeout=300)
如果这没有帮助,您可以使用
从systemd
期刊获取python错误追溯
sudo journalctl -u bot.service
并将其添加到您的问题中。