Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Timer 安排一个功能在小时内每小时运行一次_Timer_Google Apps Script - Fatal编程技术网

Timer 安排一个功能在小时内每小时运行一次

Timer 安排一个功能在小时内每小时运行一次,timer,google-apps-script,Timer,Google Apps Script,所以我试着每小时运行一个函数。此函数的作用是更新计划,以查看当前时间以及该时间点正在发生的事件 我在一个小时计时器上设置了时间驱动的项目触发器,但是,它在运行时似乎不一致,有时在一小时前5分钟,有时在一小时后10分钟 我希望函数在小时内运行,有没有办法做到这一点?这是很有可能的:您要做的是在运行结束时为下一次运行设置触发器 因此,您需要手动运行函数一次,并在最后插入以下代码段: ScriptApp.newTrigger("FUNCTION HERE") .timeBased

所以我试着每小时运行一个函数。此函数的作用是更新计划,以查看当前时间以及该时间点正在发生的事件

我在一个小时计时器上设置了时间驱动的项目触发器,但是,它在运行时似乎不一致,有时在一小时前5分钟,有时在一小时后10分钟


我希望函数在小时内运行,有没有办法做到这一点?

这是很有可能的:您要做的是在运行结束时为下一次运行设置触发器

因此,您需要手动运行函数一次,并在最后插入以下代码段:

ScriptApp.newTrigger("FUNCTION HERE")
           .timeBased()
           .at(new Date(new Date().setHours(new Date().getHours()+1,0,0,0))
           .create();
但是,因为在某些方面,这是一个脆弱的触发器链(如果一个触发器失败,它将在下一个小时内不会继续运行),所以您有一些选择


我会做一个每天运行的故障保护功能,并确保上述功能正常工作(如果没有,请重新启动链)。我还将把这个函数中的任何其他内容包装成一个(滚动到页面底部:您应该始终对所有函数执行此操作),并将上述代码添加到该函数中,以便即使您的函数失败,它下次仍将运行(或将其放在函数的开头).

我自己一直在努力使用触发器,发现只有在触发器运行的时间无关紧要的情况下,它们才可用

根据文件记载,计时器的运行时间为15分钟。因此,您无法确定它是否将在时间t或时间(t+15分钟)运行

我还发现,使用未记录的addTimer确实允许在特定时刻准确运行。见

看一看我在如何使用addTimer的问题上给自己提供的答案

如果它对您有帮助,请看上面我的答案。有一种方法可以做到这一点,而不需要任何未记录的方法。我已经为子孙后代测试了我的答案,它通常在几秒钟内有效(如果不是在精确的一分钟内),你的程序是显而易见的。我也试过了。我发现它不够可靠,特别是如果你想在短时间内运行一个函数。起初,我试图每隔几秒钟使用它。后来我尝试每隔15分钟使用一次-->仍然不可靠。只有在执行时间并不重要的情况下,它才是可接受的解决方案。目前,我只使用它每5小时30次更新一次缓存(因为缓存中的数据可以存储6小时),并结合addTimer(因此,如果一个失败,另一个可能不会执行失败),我不想重复,但这是针对上面的代码,它在特定时间,而不仅仅是每小时触发。美妙之处在于,虽然这需要更多的维护(每次运行都要重新运行),但它使用的一次性触发器最长可达一分钟(我同意这很可能不会在亚分钟的时间间隔内工作,但我已经测试了这种方法,并且它始终按要求的精确分钟运行)