Reputation: 33
how do I set the time trigger on every hour(I mean on the exact XX:00)? I use app script to create a trigger condition,but it just run the code on random time every hour.
Upvotes: 1
Views: 596
Reputation: 15318
Try (launch at any time)
function action() {
// do something ...
var f = arguments.callee.name
ScriptApp.getProjectTriggers().filter(trigger => trigger.getHandlerFunction() == f).forEach(t => ScriptApp.deleteTrigger(t))
var d = new Date();
ScriptApp.newTrigger(f)
.timeBased()
.after((60 - d.getMinutes()) * 60 * 1000)
.create()
}
Upvotes: 0
Reputation: 27350
function function_Triggered() {
// your function code goes here
deleteTriggers();
scheduledTrigger()
}
function scheduledTrigger(){
ScriptApp.newTrigger("function_Triggered")
.timeBased()
.after(1 * 60 *60 * 1000) //1 hour
.create()
}
function deleteTriggers() {
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
if ( triggers[i].getHandlerFunction() == "function_Triggered") {
ScriptApp.deleteTrigger(triggers[i]);
}
}
}
scheduledTrigger()
creates a scheduled trigger that will execute function_Triggered()
in exactly after one hour from the time you will run it.deleteTriggers()
deletes all the old triggers that were created and no longer needed.function_Triggered()
is the function where you will put all the code that you want to execute every hour. At the end of the execution, you want to delete all the old triggers and then schedule a new one again in exactly one hour.XX:00
.function_Triggered()
.Alternatively, simply create an one time scheduled based trigger for function_Triggered()
for a future time XX:00
.
This will create a chain of one hour scheduled time based executions starting from XX:00
.
Upvotes: 2