【问题标题】:Run a function every weekend at midnight?每个周末午夜运行一个函数?
【发布时间】:2020-05-23 09:39:59
【问题描述】:

所以我试图在每个周末,周六,上午 12 点运行一个函数。 我在这里寻找答案,发现有人建议使用超时,但这并不是我真正想要的,因为我认为它不能解决我遇到的问题

所以当服务器启动时,我应该从数据库中获取一个日期 假设是 2020 年 5 月 22 日星期五(这应该在每个周末发生)

我希望服务器在 2020 年 5 月 23 日星期六午夜执行一些请求/计算

我正在考虑做这样的事情:

while(true){

if(current_date==next_week){
//do stuff that i want ...

next_week=next_week+ 1 week

}

//update current_date
} 

一般来说,在服务器上运行 while 循环是否被认为是个坏主意?或者这是一个好主意? 如果这是一个坏主意,有没有更好的方法来解决这个问题?

【问题讨论】:

  • 一般来说,在服务器上运行 while 循环是否被认为是一个坏主意?”这是一个非常的坏主意。您将永远占用线程,并且没有其他方法可以工作。
  • 我从来没有真正尝试过这样做,这就是我问的原因,我知道如果你尝试在浏览器中进行无限循环,它会导致它崩溃,但我不是确定在服务器上这样做是否可以。我猜他们当时是一样的
  • 您基本上是在告诉您的服务器“使用 100% 的 CPU 功率,一天 24 小时,持续地做一件事,而不是别的:如果现在是星期六凌晨 12 点,每秒检查几百万次”。可能有一种更聪明的方法可以做到这一点:) 就像 cron 作业一样,或者至少每隔一小时检查一次条件。

标签: javascript node.js logic server-side


【解决方案1】:

你应该使用一个节点模块来管理cron jobcron 是很好的 npm 模块来完成这样的任务,node-schedule 也可以做同样的事情,使用 timeout 函数不是正确的选择在这里,应该使用编写良好的模块来管理长时间运行的进程,以便使用和利用 OS 系统调用和 API。

【讨论】:

  • 感谢您的建议,并清除了使用超时等功能的疑问。我肯定会看看这个模块。有一个美好的白天/夜晚:)
【解决方案2】:

您可以尝试使用 cron 作业来设置运行函数的时间。

从终端运行:crontab -e

然后通过这种格式设置时间:* * * * *

1st*: minute (0-59), 
2nd*: hour (0-23),
3rd*: day of month (1-31),
4th*: month (1-12),
5th*: day of week (0-6) (Sunday=0 or 7)

【讨论】:

    猜你喜欢
    • 2014-12-06
    • 2016-10-09
    • 1970-01-01
    • 2016-11-27
    • 2016-08-24
    • 1970-01-01
    • 2011-04-28
    • 2015-09-17
    • 2012-08-09
    相关资源
    最近更新 更多