Script zum Aufräumen der WIIPS-Backups

Die tausende von völlig veralteten kleinen WIIPS-Dateien im IPS-backup-Verzeichnis nerven nicht nur, sondern machen auch jedes Kopieren a…langsam.

Hier Abhilfe:


<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : delBackupWIIPS.ips.php
Trigger  : ---
Interval : tgl.

WIIPS-Dateien im <IPS>/backup bereinigen, die älter sind als definiert in
  "conf.timeout.delBackupWIIPS"   (Default: 2 Tage = 48*3600 Sekunden)
  
betrifft alle Dateien der Struktur:
   rrd.*.<zeitstempel>.~
   weather.*.<zeitstempel>.~

Rel. 1   GW    14.02.2008

*/

// in der include: mein einheitliches Log-/Debug-/Alarm-Handling,
// definiert und steuert function "loggen" sowie Variablen "$myself" und "$debug"
include "_globals.ips.php";

if (!IPS_VariableExists("conf.timeout.delBackupWIIPS")) {
   IPS_CreateVariable("conf.timeout.delBackupWIIPS", "Integer");
   SetValueInteger("conf.timeout.delBackupWIIPS", (48*3600));
}
$timeout = GetValueInteger("conf.timeout.delBackupWIIPS");

$jetzt = time();  // als Variable für die ggf. notwendige Verwendung perpendikulärer Jetztzeit (siehe Snegow: Ring der Gegenzeit) :-)
$anzahlD = 0;

$root = str_replace( '\\','/',IPS_GetKernelDir() );
$data = $root . "backup/";
$dircontent = scandir($data);
foreach($dircontent as $filename) {
   if ($filename != '.' && $filename != '..') {
      $elemente = array();
      $elemente = explode(".", $filename);   // Dateiname am "." trennen
      $anz = sizeof($elemente);
      if (($anz > 3) and (is_numeric($elemente[2])) and ((strtolower($elemente[0]) == "weather") or (strtolower($elemente[0]) == "rrd"))) {
         $timestamp=(int)$elemente[2];
         if ($timestamp>0) {
            $str = $filename;
            $datum = date("d.m.Y", $timestamp);
            $zeit = date("H:i:s", $timestamp);
            $str .= " (Timestamp: ".$datum." ".$zeit.")
";
//            echo $str;
            if ($timestamp + $timeout < $jetzt) {
               unlink ($data.$filename);
               $anzahlD++;
//               echo "Treffer!
";
            }
         }
      }
   }
}
$msg = $anzahlD." alte WIIPS-Backup-Dateien gelöscht.";
loggen ($msg, $myself);
if ($anzahlD > 0) {
}

?>


Ich ruf das einfach einmal am Tag auf. Aber aufpassen, das das zu einer Minute passiert, in der WIIPS normalerweise nicht viel Arbeit tut. (bei mir: 7:23 Uhr)

Hallo,

gute Idee, soetwas hatte ich schon öfters gesucht.

Für die Anfänger unter uns sollte Du aber Deinen

// in der include: mein einheitliches Log-/Debug-/Alarm-Handling,
// definiert und steuert function "loggen" sowie Variablen "$myself" und "$debug"
include "_globals.ips.php";

nebst

loggen ($msg, $myself);

löschen Das verwirrt den Einen oder Anderen.

Werde Dein Skript heute Abend gleich mal testen (Natürlich nach einem Vollupdate mit Tonis-Tools.)

Ich stell da ungern was ungetestetes rein, und ein vergessener Aufruf oder so beim „schnell mal rausnehmen“ ist schnell übersehen, das wäre dann m.E. noch fataler, als von selbstlesenden und -denkenden Usern auszugehen.

Auch habe ich hier bei mir nicht noch eine zweite „Public“-IPS-Installation zum Testen „des bereinigten Auslieferungsstandes“ oder so und werde ganz sicher nicht erst nochmal alles auf „ohne sonstige Systemumgebung“ umbauen und testen, wozu sonst habe ich die???

Sicher hast du recht, dass das anzupassen ist. Aber genau deshalb steht da ein Kommentar drüber, der auf die betroffenen Variablen bzw. Funktionsaufrufe verweist. Wer diese bei sich nicht nutzen und anpassen will, kommentiert die betroffene Zeile einfach aus. Andere haben ähnliche Umgebungen und wissen gleich, was sie bei Bedarf anpassen müßten. Das war die Idee dabei.

Es war lediglich meine Absicht, evtl. Hilfe zur Selbsthilfe zu geben, nicht hier als „Softwarehersteller“ aufzutreten und in-a-box-Lösungen „auszuliefern“. Wer sich mit Scripts beschäftigt, wird früher oder später selber mitdenken müssen, auch wenn das im Moment in Deutschland nicht so modern sein mag…

Und sicher kann man ja auch mal fragen, wenn man da absolut nicht mit klarkommt. Ich bin bestimmt der Letzte, der da nicht helfen würde. :wink:

$jetzt = time(); // als Variable für die ggf. notwendige Verwendung perpendikulärer Jetztzeit (siehe Snegow: Ring der Gegenzeit) :slight_smile:

… was es so alles gibt.:rolleyes:

Notfalls hier mal Diagonallesen: Klick

[OffTopic=„ON“] Oh ja… [OffTopic=„OFF“]

Tschuldigung… Aber das musste mal gesagt werden…

Gruß,

Ein Leidensgenosse

ok, also im Ernst: Hab mir das angewöhnt in der Prozessprogrammierung, niemals direkt die aktuelle Zeit mitten im Programm zu ermitteln.

Hat den Vorteil im Debug auch mal „simulierte Jetztzeit“ angeben zu können, also so tun als wenn wir jetzt diese oder jene Zeit hätten. Das hat schon so manche Prozess-Runtime-Wanze erlegt… :wink:

Edit:
…naja, und die Idee von Snegow in dem zitierten Buch… Jemand anderes mit spitzen Ohren hätte da sicher zumindest gesagt: „…interessant!“ :wink:

Gruß Gerd

Ah da ist jemand SF Fan. :slight_smile: OK jetzt hab ich´s. THX.

…ist schon irgendwie erschreckend, wie nahe man plötzlich z.B. mit dieser wirklich sinnvollen „Jetztzeit-Simulation“ einigen jahrzehntealten SF-Ideen kommt. …aber das wird nun wohl zu OT

Hallo gwanjek,

nicht das ich nur verkannt kritesiere…

… wie gesagt habe ich solch ein Skript schon länger gesucht, also ran, installiert, die beiden Zeilen auskommentiert und ich muss sagen, super Sache.

Danke.

Hallo,

gerd - danke - ich denke Du weisst das auch.

Ansonsten bitte an alle: beim Thema bleiben, alles andere gehoert in den Off Topic Bereich. Hier gehts wirklich nur um WIIPS.

…schon gut. Ist doch alles auch purer Eigennutz bei mir :smiley: