Tmux, cron не работает с моим скриптом на Python в облаках Google - PullRequest
0 голосов
/ 22 июня 2019

, поэтому я пытаюсь запустить свой скрипт Python 24/7 с помощью облачной машины Google, я хочу использовать tmux и cron, но я думаю, что делаю что-то не так, и это не работает для меня.Когда я запускаю свой скрипт в окне SSH, он работает отлично, но когда я закрываю его.Он не публикует в твиттере и не редактирует мой файл json.

Я пытался найти ответ в Google, но мне не повезло.Я попытался использовать tmux и запустить мой скрипт с бесконечным циклом и без блокировки.Я пытался использовать cron без бесконечного цикла и запускать свой скрипт каждые 5 минут, но не повезло.Я попытался использовать cron внутри tmux, но безуспешно.

import requests
import json
import time
import twitter

class TodayILearned():
    def __init__(self):
        self.link = 'https://www.reddit.com/r/todayilearned/new/.json'

    def get_info(self):
        try:
            r = requests.get(self.link, headers = {'User-agent': 'your bot 0.1'})
            r.raise_for_status()
        except requests.exceptions.HTTPError as error:
            print(f'There is problem:\n{error}')
            return False
        new_til = json.loads(r.content)
        new_til = new_til["data"]["children"][0]['data']['title']
        new_til = new_til.replace('TIL', '').replace('Til', '').strip()
        for _ in range(len(new_til) - 1):
            if new_til[0].isalpha() == False:
                new_til = new_til.replace(new_til[0], '').strip()#.capitalize()
            else:
                break
        new_til = new_til.split(' ', 1)
        if new_til[0].lower() == 'this' or new_til[0].lower() == 'that' or new_til[0].lower() == 'about' or new_til[0].lower() == 'of':
            new_til.pop(0)
        new_til = ' '.join(new_til)
        new_til = new_til[:1].upper() + new_til[1:]
        if new_til[-1].isalnum() == True:
            new_til += '.'
        return new_til if len(new_til) < 280 else False #change for 140 when twitter working 

    def save_new_dict(self, new_dict):
        with open('til_news_base.json', 'w') as json_file:
            json.dump(new_dict, json_file, indent=2)

    def read_json_file(self):
        with open('til_news_base.json') as json_file:
            data = json.load(json_file)
        self.last_key = int(sorted(list(data.keys()))[-1])
        return data

    def post_on_twitter(self, new_post):
        TOKEN = 'xxx'
        TOKEN_KEY = 'xxx'
        CON_SEC = 'xxx'
        CON_SEC_KEY = 'xx'
        my_auth = twitter.OAuth(TOKEN,TOKEN_KEY,CON_SEC,CON_SEC_KEY)
        twit = twitter.Twitter(auth=my_auth)
        twit.statuses.update(status=new_post)

    def program(self):
        wait_for_seconds = 30
        while True:
            #first load the base from file
            dict_with_news = self.read_json_file()
            #second get new posts from reddit
            new_info = self.get_info()
            #check if new post in base or if is it last post
            if new_info != False:
                if new_info != dict_with_news[str(self.last_key)]:
                    dict_with_news[str(self.last_key + 1)] = new_info
                    print(new_info)
            #add to base if not
                    self.save_new_dict(dict_with_news)
            #print new TIL on twitter
                    self.post_on_twitter(new_info)
            #wait Xs
            time.sleep(wait_for_seconds)


def program():
    class_til = TodayILearned()
    class_til.program()

if __name__ == "__main__":
    program()

Я хочу, чтобы он запускался каждые 5 минут, но не повезло, он не публикует новые сообщения в твиттере после закрытия SSH.после открытия моего SSH-соединения с облаком Google я пишу: tmux, измените каталог на место, где находятся мой python-файл и json-файл.я запускаю свой скрипт на python, используя python3.Я вижу в консоли мои новые новости и вижу их в твиттере.Я жду 5 минут, и каждый раз, когда новый материал публикуется на Reddit, я вижу это в своей консоли и публикую в твиттере.Я закрываю SSH, и нет новых сообщений в твиттере или в файле json.Я снова открываю SSH, и нет никаких ошибок или чего-либо еще.Я попробовал также cron: я использовал команду '* / 5 * * * * python 3 /python_programs/watch_for_new_TIL_facts.py' без '', конечно.и до сих пор не повезло.Я попробовал эту команду в cron в tmux и без него.Я создал материал как обычный пользователь и как root.

...