Google Apps Script als Cronjob-Ersatz (Webserver) nutzen

Published by Philipp Schuster on

Google Apps Script als Cronjob-Ersatz (Webserver)

Wenn ihr in eurem Webhosting-Paket keine Cronjobs enthalten habt so wie ich, kann euch Google Drive mit Google Apps Script einen soliden und kostenlosen Ersatz bieten. Dort könnt ihr mit einem einfachen Skript und einem umfangreichen Trigger-Menü (= Auslöser) eure “Cronjobs” definieren. Das ist zwar nicht so zuverlässig wie ein echter Cronjob, da das Zeitintervall in dem er ausgeführt wird leicht variabel ist, aber immerhin! 🙂

Was ist Google Apps Script?

Google Apps Script ermöglicht es euch einfach Skripte auf der Google Infrastruktur laufen zu lassen in einer JavaScript-ähnlichen Syntax. Das ganze läuft über (euer) Google Drive. In einer dieser Google Apps Script Projekte, könnt ihr mehrere Skript-Dateien ablegen. Das kann man aber jetzt wirklich nicht in ein paar Zeilen zusammenfassen, denn es ist einfach zu mächtig. Ganz gemäß dem Motto: Do more with Google.

Schritt 1: Google Apps Script Projekt anlegen

Ladet auf euren Webserver eine Skriptdatei (PHP) hoch, welche ihr als “Cronjob” definieren wollt und notiert euch die URL. Dieses Skript kann zum Beispiel eure Datenbank sichern und wird dann eben jeden morgen um 3 Uhr aufgerufen – ganz nach eurem Belieben! Legt nun in eurem Google Drive eine Google Apps Script Projekt-Datei an so wie im Screenshot.

Google Apps Script als Cronjob-Ersatz (Webserver)

Schritt 1: Projekt anlegen

Schritt 2: Leeres Projekt erstellen

Klicke im Auswahlfenster auf “Leeres Projekt”.

Google Apps Script als Cronjob-Ersatz (Webserver)

Schritt 2: Leeres Projekt erstellen

Schritt 3: Skript schreiben und autorisieren

Für einen einfachen “Cronjob” beziehungsweise URL-Aufruf braucht man nur drei Zeilen.

function beliebigerFunktionsName() {
  UrlFetchApp.fetch("http://link-zu-deinem.php/skript/auf/dem/web.server");
}

Man kann das ganze natürlich auch ein wenig ausbauen wie ich es im Screenshot getan habe um weitere Funktionalitäten zu integrieren, aber im Grunde genommen reicht der Code oben. Meinen Code findet Ihr auch nochmal am Ende der Seite. Damit die App funktioniert muss sie zunächst autorisiert werden, da sie in Eurem Namen Aktionen auf der Google Infrastruktur ausführt. Dafür müsst ihr wie im Screenshot zu sehen auf das “Funktion starten”- klicken und ihr müsst die App autorisieren, denn sie hat die Berechtigung externe URL’s aufzurufen. Die Berechtigung bleibt dann dauerhaft erhalten. Entziehen kann man die Berechtigung jederzeit unter https://security.google.com/settings/security/permissions.

Google Apps Script als Cronjob-Ersatz (Webserver)

Schritt 3: Skript schreiben und autorisieren

Schritt 4: Trigger-Menü aufrufen

Nun müsst ihr das Trigger-Menü wie im Screenshot zu sehen aufrufen. Trigger sind Auslöser, welche bei bestimmten Ereignissen Funktionen eures Skripts ausführen können.

Google Apps Script als Cronjob-Ersatz (Webserver)

Schritt 4: Trigger-Menü aufrufen

Schritt 5: Trigger setzen

Stellt nun die Trigger ein wie ihr sie benötigt. Aber bitte bedenkt: Wählt sinnvolle Intervalle, denn ihr müsst weder die Google Server mit unnötigem Mist belasten, noch andere Server unnötig belasten.

Google Apps Script als Cronjob-Ersatz (Webserver)

Schritt 5: Trigger setzen

Wie nutze ich für mich selber Google Apps Script?

Derzeit kümmert sich Google Apps Script für mich um einen täglichen Aufruf meines MySQL-Backup-PHP-Skripts damit die Datenbanken täglich gesichert werden. Das Skript auf meinem Webserver meldet dann Erfolg bzw. Misserfolg zurück und Google Apps Script benachrichtigt mich, wenn es einen Fehler geben sollte. Die Email-Benachrichtigung könnte ich mir zwar auch über meinen Webserver senden lassen, aber für dieses Tutorial habe ich es eben so gemacht. Wie und über was Ihr benachrichtigt werden wollt ist vollkommen euch selber überlassen. Der Code wie er bei mir läuft:

Cronjobs.gs
function phip1611MysqlBackupScript() {
  var content = "";
  content = UrlFetchApp.fetch("http://***.phip1611.de/***");
  if (content != "Success!") {
    message = new Message();
    message.to = "webmaster@phip1611.de";
    message.subject = "phip1611 MySQL-Backup Bericht: Fehler!";
    message.body = "Es gibt unbekannte Probleme mit dem automatischen MySQL-Backup für phip1611.de";
    MailApp.sendEmail(message);
  }
}
Functions.gs
function Message() {
  this.to = "";
  this.subject = "";
  this.body = "";
}

Philipp Schuster

Hi, I'm Philipp and interested in Computer Science. I especially like low level development, making ugly things nice, and de-mystify "low level magic".

1 Comment

ramon1611 · 2014-02-23 at 05:04

Coole Funktion, hab drive noch garnich so weit durchforstet 😀
Danke für das tut (y)

Leave a Reply

Your email address will not be published. Required fields are marked *