Jim
Jim

Reputation: 33

How to set app script time trigger on the hour?

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

Answers (2)

Mike Steelson
Mike Steelson

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

Marios
Marios

Reputation: 27350

Solution:

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]);
  }
}
}

Explanation:

  • 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.

Instructions:

  1. Wait until the time is XX:00.
  2. Then just for the first time and only once, manually execute 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

Related Questions