📜  在Google Cloud上安排Cron Job

📅  最后修改于: 2021-04-16 09:17:37             🧑  作者: Mango

Python通常被称为粘合语言,因为它是一种易于组合多个不同系统的强大工具。这部分是因为Python有很大的客户端库的支持,它可以让你互动,有很多的API,产品和服务从Python的舒适性。但这不只是以云结尾。 Python对于将几乎所有其他内容组合在一起很有用。

Cron Job是Linux命令,用于计划要在服务器上运行的任务。它们是自动化中最常用的。在本文中,我们将研究在Google云存储上使用Python计划cron作业的步骤。

作为示例,我们将编写一个Python脚本,该脚本从Hacker News API获取最新的故事,然后遍历每个故事。如果它们的任何标题与无服务器匹配,它将向您发送一封包含链接的电子邮件。我们将使用请求库向该API的URL发出HTTP请求,该请求恰好托管在Google Cloud产品Firebase上。

第一步是编写Python脚本,

Python3
from request import get
  
api_url = 'https://hacker-news.firbaseio.com/v0/'
  
top_stories_url = api_arl + 'topstories.json'
  
item_url = api_url + 'item/{}.json'


Python3
# sudo code
  
from utils import send_email
  
def check_serverless_stories(request):
  top_stories = request.get(top_stories_url).json
  serverless_stories = []
    
  ...
    
  send_email(serverless_stories)
    
    
if serverless_stories:
  send_email(serverless_stories)


然后,如果有任何故事匹配,我们将使用一些自定义代码发送以所有“无服务器”故事格式设置的电子邮件。我们可以将所有这些放到一个Python函数,如下所示:

Python3

# sudo code
  
from utils import send_email
  
def check_serverless_stories(request):
  top_stories = request.get(top_stories_url).json
  serverless_stories = []
    
  ...
    
  send_email(serverless_stories)
    
    
if serverless_stories:
  send_email(serverless_stories)

然后,我们可以使用以下命令将此应用程序部署到Cloud Functions:

$ gcloud functions deploy check_serverless_stories \
  --runtime python38
  --trigger-http

部署后,我们为函数获得了一个公共URL。因此,每当我们访问该URL时,它将在Hackernews.com的首页上向我们发送任何新文章。

最后一步是按计划运行它。为此,我们使用Cloud Scheduler创建一个新作业,该作业每天运行一次。

Cron作业按使用Unix cron格式指定的重复间隔进行调度。您可以定义计划,以便您的作业一天运行多次,或在特定的日期和月份运行。

我们将把工作安排为每天午夜运行一次。我们将使用gcloud Scheduler jobs create命令来创建一个作业,该作业将按时间表调用我们的函数,如下所示:

$ gcloud scheduler jobs create http email_job \
  --schedule = "0 0 * * *" \
  --uri = https://YOUR-REGION-project.cloudfunctions.net/check_serverless_stories

我们可以使用gcloud Scheduler作业列表来确认我们的作业是使用以下命令创建的:

$ gcloud scheduler jobs list

并且我们可以使用gcloud Scheduler作业运行一次来运行它,而与下面的时间表无关:

$ gcloud scheduler jobs run email_job

这使您无需做任何事情就可以每天将任何无服务器的文章直接发送到ypur收件箱。