기존 파이썬 실행하던 스크립트(polling)를 끄고 실행하려면 어떻게 해야할까요?
텔레그램 메시지 보내기를 만지작 만지작 거리다가
이제는 텔레그램으로 봇을 한번 어떻게 만들어보고자 또 삽질을 하고 있습니다.
셀레니움 도커에 pip install python-telegram-bot 으로 텔레그램 api를 설치하고
docker exec -i selenium sudo python3 /selenium/tele_bot_test.py 로 코드를 실행하면 잘 작동합니다만...
문제는 이게 도커가 재부팅하거나 시스템 재부팅을 대비해서(초보라 본의 아니게 서버가 잊을만하면 터집니다 ㅇㅅㅇ;)
재부팅시에 자동 실행하고자
crontab / init.rd / rd.0 등 수정해봤는데, 모두 기존 텔레그램 스크립트가 실행되고 있다고 정상 작동하지 않네요.
기존 polling 하고 있는 스크립트를 끄고 새 스크립트를 실행해야하는것이 문제인데
docker exec -i selenium sudo python3 /selenium/tele_bot_test.py 로 하루에 두번 정도 재실행을 시키고 싶은데 그렇게 하려면
1. 스크립트 실행전에 기존 tele_bot_test.py를 다른 crontab으로 꺼준다.
(방법을 모르겠습니다. py -ef ? | grep 해봐서 리스트 띄우고 지우면 될 것같기도 한데... 에.. 다 실패했습니다 ㅜ.ㅜ;;)
2. polling 되고 있는 스크립트가 자동으로 꺼지게 하거나 stop_polling등을 해본다.(인터넷 찾아본대로 몇가지 해봤는데 안먹힙니다 ㅜ.ㅜ;;)
혹시 해결방법 아시는분 계실까요?
혹시 몰라 기존 코드 첨부하자면 tele_bot_test.py는 아래와 같습니다.
import telegram
from telegram.ext import Updater
from telegram.ext import MessageHandler, Filters
import re
#Environment###########################
chat_id=""
token=""
file_path = "/selenium/tele_bot_url"
naver = "naver"
pattern_naver = "[n][a][v][e][r]"
#####################################
# updater
updater = Updater(token=token, use_context=True)
dispatcher = updater.dispatcher
bot = telegram.Bot(token) #bot.sendMessage(chat_id=chat_id, text="")
updater.start_polling()
def handler(update, context):
user_text = update.message.text # 사용자가 보낸 메세지를 user_text 변수에 저장합니다.
def is_url_valid(url):
REGEX_URL = '[(http(s)?):\/\/(www\.)?a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}([-a-zA-Z0-9@:%_\+.~#?&//=]*)'
output = re.fullmatch(REGEX_URL, url)
if output != None:
return True
def respond(file_path, type):
bot.send_message(chat_id=chat_id, text=f"{type}의 url을 저장합니다.") # 답장 보내기
f = open(f"{file_path}/{type}_url.txt", 'a')
f.write(user_text + "\n")
f.write("0" + "\n")
f.write("0" + "\n")
f.close()
if is_url_valid(user_text) == True:
elif re.search(pattern_naver, user_text) != None:
respond(file_path, naver)
else:
bot.send_message(chat_id=chat_id, text= "올바른 URL 을 입력하십시오")
else:
if user_text == "/start":
bot.send_message(chat_id=chat_id, text= "텔레그램 봇이 시작됐어유")
elif user_text == "/help":
bot.send_message(chat_id=chat_id, text= " 추가하고자 하는 URL 을 입력하십시오")
bot.send_message(chat_id=chat_id, text= "네이버 웹툰 URL만 지원합니다.")
else:
bot.send_message(chat_id=chat_id, text= "사용법을 모른다면 /help 를 입력하십시오")
echo_handler = MessageHandler(Filters.text, handler)
dispatcher.add_handler(echo_handler)