使用AWS Lambda在无服务器环境中触发两次Cron作业
我正在运行一个Cron作业,该作业在UTC每周日上午10:00运行 它将文本消息推送到电报组 这是我的 以下有关部分— serverless.yml handler.js 代码中没有任何地方会向电报发送两次请求,即,使用AWS Lambda在无服务器环境中触发两次Cron作业,cron,aws-lambda,serverless,Cron,Aws Lambda,Serverless,我正在运行一个Cron作业,该作业在UTC每周日上午10:00运行 它将文本消息推送到电报组 这是我的 以下有关部分— serverless.yml handler.js 代码中没有任何地方会向电报发送两次请求,即,axios只写入一次 我得到的日志说cronjob在10:00:09 am&在10:01:08 am 我正在使用AWS Lambda的无服务器框架 如何确保它只运行一次?因为人们在电报组中收到了两条消息:(在那个链接上读评论哦,我在发布之前读过。但是解决方案是什么?如果有的话?因为我
axios
只写入一次
我得到的日志说cronjob在10:00:09 am
&在10:01:08 am
我正在使用AWS Lambda的无服务器框架
如何确保它只运行一次?因为人们在电报组中收到了两条消息:(在那个链接上读评论哦,我在发布之前读过。但是解决方案是什么?如果有的话?因为我们无法维持这种状态,所以我想如果有更有经验的人有答案的话。这就是我发布它的原因:)而且,你在回答中说,如果失败一次,然后它可能会再次呼叫。对我来说,它根本没有失败,因为它只有一个get请求&cron作业在一分钟内再次运行,因此没有失败的情况。您是否也检查了aws lambda控制台中的触发器。有一次,我发现它们是两个相同的触发器,在使用ServerLesI部署之后,我不知道如何在AWS Lambda控制台中进行检查,但我使用
sls logs-f cron-t
检查了来自Serverless的日志,它提供了所有日志。在无服务器仪表板中,我只有一个应用程序,这意味着它是唯一可以运行的应用程序。我的代码也只有一个请求,这意味着没有误报。感到悲哀的是,它无缘无故被执行了两次:(
service: lessons-of-hn-telegram-bot
provider:
name: aws
runtime: nodejs8.10
environment:
BOT_API_KEY: ${file(./env.json):BOT_API_KEY}
CHANNEL_ID: ${file(./env.json):CHANNEL_ID}
functions:
cron:
handler: handler.run
description: Cron job that runs every Sunday at 10 am UTC
events:
- schedule: cron(0 10 ? * SUN *)
const axios = require("axios");
const { lessonsOfHN } = require("./src/lessonsOfHN");
exports.run = async (event, context, callback) => {
const time = new Date();
console.log(`Your cron function "${context.functionName}" ran at ${time}`);
const lesson = await lessonsOfHN();
const ENDPOINT = `https://api.telegram.org/bot${
process.env.BOT_API_KEY
}/sendMessage`;
await axios({
method: "get",
url: ENDPOINT,
data: {
chat_id: process.env.CHANNEL_ID,
parse_mode: "markdown",
disable_web_page_preview: true,
text: lesson
}
});
callback(null, { lesson, success: true });
};