我有一个关于在云服务器上托管个人项目的非常简单(我认为)的问题。目前,我每天早上都手动运行我的脚本。我想通过在云服务器上安排此脚本的运行来自动化此过程,以便我可以“设置它并忘记”。
项目详细信息:我有一个项目,从各个网站抓取 NBA 数据,并为当天的每场比赛做出选择。它会发布这些选择并将选择保存到 sqlite 数据库中,以便它可以在下次运行时检查选择。以下是该项目的结构。
twitterBot
├── __pycache__
│ ├── config.cpython-311.pyc
│ └── twitter.cpython-311.pyc
├── config.py
├── main.py
├── nba_models
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-311.pyc
│ │ ├── config.cpython-311.pyc
│ │ └── get_picks.cpython-311.pyc
│ ├── get_picks.py
│ ├── nba_pick_data_2023.db
│ ├── nba_pick_recent_data_2023.db
│ ├── nba_scraper
│ │ ├── __init__.py
│ │ ├── __pycache__
│ │ │ ├── __init__.cpython-311.pyc
│ │ │ └── scraper.cpython-311.pyc
│ │ └── scraper.py
│ └── vegas
│ ├── __init__.py
│ ├── __pycache__
│ │ ├── __init__.cpython-311.pyc
│ │ └── vegas.cpython-311.pyc
│ └── vegas.py
├── test.ipynb
└── twitter.py
由于该项目有点复杂,下面是该项目的简化版本,其中包含大部分基础知识。我将使用这个目录来测试/掌握我最终使用的任何服务。
cloudTest 是根目录,包含以下文件。
cloudTest
├── __pycache__
│ └── config.cpython-311.pyc
├── config.py
├── example.db
├── pic.png
└── test.py
test.py
如下,包含我的主项目所具有的大部分功能。
import sqlite3
import os
import tweepy
import config
# Creates and insert some data in sqlite database
current_directory = os.getcwd()
db_file_path = os.path.join(current_directory, 'example.db')
conn = sqlite3.connect(db_file_path)
cur = conn.cursor()
table_creation_query = '''
CREATE TABLE IF NOT EXISTS example_table (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
);
'''
cur.execute(table_creation_query)
# Get the maximum existing ID
max_id_query = 'SELECT MAX(id) FROM example_table'
cur.execute(max_id_query)
max_id = cur.fetchone()[0]
# Generate new data programmatically
new_name = "New User"
new_age = 25
# Increment the ID for the new row
new_id = max_id + 1 if max_id is not None else 1
# Insert new data into the table
insert_query = 'INSERT INTO example_table (id, name, age) VALUES (?, ?, ?)'
cur.execute(insert_query, (new_id, new_name, new_age))
# Commit the changes and close the connection
cur.execute(f"select * from example_table where id = {new_id}")
new_data = cur.fetchone()
conn.commit()
conn.close()
auth = tweepy.OAuth1UserHandler(config.CONSUMER_KEY, config.CONSUMER_SECRET)
auth.set_access_token(config.ACCESS_TOKEN, config.ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
client = tweepy.Client(
consumer_key=config.CONSUMER_KEY,
consumer_secret=config.CONSUMER_SECRET,
access_token=config.ACCESS_TOKEN,
access_token_secret=config.ACCESS_TOKEN_SECRET,
)
media = api.simple_upload(f"{current_directory}/pic.png")
client.create_tweet(text=f"Just inserted {new_data}", media_ids=[media.media_id])
我尝试在网上寻找答案,但我对云提供商/外部服务器不太熟悉,所以我不知道从哪里开始。起初我认为这是一个相对简单的问题,但经过一番研究后发现它很复杂。有人能指出我正确的方向吗?有关于这个主题的好资源吗?
以下是一些可能有用的详细信息:
我刚刚创建了一个 GCP 帐户,并有 300 美元可供使用。
我已经看到很多关于 Google Functions 此类工作的建议,但我认为我的项目可能太大了。我定义了两个嵌套在另一个包中的 python 包。我也不确定 sqlite 数据库在 Google Functions 中如何工作。我安装/使用了多个不附带默认 python 的软件包。但如果有人认为这是正确的想法,请告诉我。我也
我看到了有关 digitalOcean 之类的建议。这是正确的路线吗?
如果需要更多详细信息,请告诉我。我感谢任何和所有的帮助。
如果你想定期运行你的程序,只需在服务器控制台中通过以下命令创建 Crontab 任务:
EDITOR=nano crontab -e
“nano”可以替换为您自己喜欢的编辑器名称 - 例如“vi”或“mcedit”。
在编辑器中,键入此行(将 /home/ubuntu 替换为实际路径):
30 6 * * * /home/ubuntu/cloudTest/test.py
保存,退出,享受吧!
当然,test.py 必须是可执行的:
chmod +x test.py
如果您想了解更多有关 Cron 的信息,请从这里开始:https://en.wikipedia.org/wiki/Cron