Tmux,cron 不适用于我在 google 云上的 python 脚本
Tmux, cron doesn't work with my python script on google clouds
所以我正在尝试使用 google 云机器 运行 我的 python 脚本 24/7,我想使用 tmux 和 cron 但我认为我做错了什么并且它对我不起作用。当我 运行 我在 SSH window 中的脚本时,它工作得很好,但是当我关闭它时。它不会 post 发推特或编辑我的 json 文件。
我曾尝试在 google 中寻找答案,但没有成功。
我已经尝试使用 tmux 和 运行ning 我的脚本无限循环并且没有锁定。
我尝试过使用没有无限循环的 cron 和 运行 我的脚本每 5 分钟一次,但没有成功。
我试过在 tmux 中使用 cron 但没有成功。
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 后,它不会 post 推特上的新内容。
打开与 google 云的 SSH 连接后,我写道:
tmux,将目录更改为我的 python 文件和 json 文件所在的位置。我 运行 我的 python 脚本使用 python3。我可以在控制台中看到我的新消息,我可以在 Twitter 上看到它。我等了 5 分钟,每次在 reddit 上 posted 新内容时,我都可以在我的控制台中看到它,并在 twitter 上 posted。我关闭了我的 SSH,并且在 Twitter 或 json 文件中没有新的 post。我再次打开 SSH,没有任何错误。我也尝试了 cron:我使用了命令 '*/5 * * * * python 3 /python_programs/watch_for_new_TIL_facts.py'
当然没有''。仍然没有运气。
我在 tmux 的 cron 中尝试了这个命令,但没有它。我以普通用户和 root 身份创建了东西。
在您的 crontab 中,您在 Python
和 3
之间有一个 space。消除它。
所以我正在尝试使用 google 云机器 运行 我的 python 脚本 24/7,我想使用 tmux 和 cron 但我认为我做错了什么并且它对我不起作用。当我 运行 我在 SSH window 中的脚本时,它工作得很好,但是当我关闭它时。它不会 post 发推特或编辑我的 json 文件。
我曾尝试在 google 中寻找答案,但没有成功。 我已经尝试使用 tmux 和 运行ning 我的脚本无限循环并且没有锁定。 我尝试过使用没有无限循环的 cron 和 运行 我的脚本每 5 分钟一次,但没有成功。 我试过在 tmux 中使用 cron 但没有成功。
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 后,它不会 post 推特上的新内容。 打开与 google 云的 SSH 连接后,我写道: tmux,将目录更改为我的 python 文件和 json 文件所在的位置。我 运行 我的 python 脚本使用 python3。我可以在控制台中看到我的新消息,我可以在 Twitter 上看到它。我等了 5 分钟,每次在 reddit 上 posted 新内容时,我都可以在我的控制台中看到它,并在 twitter 上 posted。我关闭了我的 SSH,并且在 Twitter 或 json 文件中没有新的 post。我再次打开 SSH,没有任何错误。我也尝试了 cron:我使用了命令 '*/5 * * * * python 3 /python_programs/watch_for_new_TIL_facts.py' 当然没有''。仍然没有运气。 我在 tmux 的 cron 中尝试了这个命令,但没有它。我以普通用户和 root 身份创建了东西。
在您的 crontab 中,您在 Python
和 3
之间有一个 space。消除它。