Einträge die älter als 24h sind in der PostgreSQL Datenbank löschen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Einträge die älter als 24h sind in der PostgreSQL Datenbank löschen

    Hallo Ihr Lieben,

    ich bin im schreiben von Code ein Neuling. Ich fange gerade erst an zu programmieren. Dazu hilft mir folgende Anleitung:
    https://programmieren-starten.de/blog/python-lernen/
    Parallel versuche ich folgenden UseCase zu programmieren:
    Alle Einträge in der PostgreSQL Datenbank fail2ban die älter als 24h sind sollen gelöscht werden. Dies soll per PHP Code und Cron Job , alle 2 Minuten geprüft werden. Hierzu habe ich zwei PHP Code Dateien geschrieben. Der zweite Code (crontab_new.php) funktioniert nicht.
    1. config_new.php
    PHP-Code:
    root@dsme01:~# cat /etc/fail2ban/config_new.php
    #!/usr/bin/php
    <?php
    // database configuration, use only one central postgresql server
    $dbserver="localhost";
    $dbuser="fail2ban";
    $dbpass="########";
    $dbname="fail2ban";
    $tablename="fail2ban";
    // connect to postgresql database
    try {
        
    $link = new PDO("pgsql:host=$dbserver;dbname=$dbname"$dbuser$dbpass);
        
    $link->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
    } catch (
    PDOException $e) {
        die(
    'Could not connect: ' $e->getMessage());
    }
    ?>
    2. crontab_new.php
    PHP-Code:
    root@dsme01:~# cat /etc/fail2ban/cron2ban_new.php
    #!/usr/bin/php
    <?php
    require_once((dirname(__FILE__)) . "/config_new.php");
    $curdate=date("Y-m-d H:i:s");
    // query PostgreSQL
    $query "DELETE FROM fail2ban WHERE created < 24h = '$curdate'";
    // $query = "DELETE FROM fail2ban WHERE DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 1440 MINUTE) > created";
    $stmt $link->prepare($query);
    $stmt->execute();
    if (
    $stmt->execute()) {
        echo 
    "IP delete in the DATABASE";
    } else {
        echo 
    "Error: " $stmt->errorInfo()[2];
    }
    exit;
    ?>
    Die Tabelle hat folgende Spalten:
    id, hostname, created, name, protocol, port und ip. Im Feld created steht folgender Inhalt: "2025-01-04 01:53:17.312851+01".
    Der Code in der Datei crontab_new.php ist fehlerhaft. Was mache ich nur falsch. Ich hoffe ich nerve Euch nicht mit meiner Frage und der Bitte um Unterstützung?
    Vorab herzlichen Dank für Eure Hilfe und verbleibe ...
    Mit lieben Grüßen von Stefan Harbich
    Zuletzt geändert von sharbich; 04.01.2025, 14:45.

  • #2
    DELETE FROM fail2ban WHERE created < NOW() - INTERVAL 1 DAY;​

    Kommentar


    • #3
      Zitat von scatello Beitrag anzeigen
      DELETE FROM fail2ban WHERE created < NOW() - INTERVAL 1 DAY;​
      Bei diesem Code:
      PHP-Code:
      #!/usr/bin/php
      <?php
      require_once((dirname(__FILE__)) . "/config_new.php");
      // query PostgreSQL
      $query "DELETE FROM fail2ban WHERE created < NOW() - INTERVAL 1 DAY";
      $stmt 
      $link->prepare($query);
      $stmt->execute();
      if (
      $stmt->execute()) {
          echo 
      "IP delete in the DATABASE";
      } else {
          echo 
      "No Dataset delete";
      }
      exit;
      ?>
      Erhalte ich dolgende Fehlermeldung:
      Code:
      root@dsme01:/etc/fail2ban# ./cron2ban_new.php
      PHP Parse error:  syntax error, unexpected '$stmt' (T_VARIABLE) in /etc/fail2ban/cron2ban_new.php on line 6
      ​

      Kommentar


      • #4
        Die vorherige Zeile muss mit einem ; (Semikolon) enden anstatt mit einem : (Doppelpunkt)

        Kommentar


        • #5
          Zitat von reddighamburg Beitrag anzeigen
          Die vorherige Zeile muss mit einem ; (Semikolon) enden anstatt mit einem : (Doppelpunkt)
          Die Zeilen enden mit einem Semikolon. Bin ich so blind?

          Kommentar


          • #6
            Das tun sie hier tatsächlich. Mein Handy ist definitiv zu klein ? Allerdings deutet die Fehlermeldung darauf hin, dass sie es nicht tun bzw. ein anderes vorheriges Sprachkonstrukt nicht abgeschlossen ist.
            Der Fehler besagt, dass $stmt in Zeile 6 dort nicht erwartet wurde. Das ist meistens der Fall, wenn der eigentliche Fehler kurz davor liegt. Ein fehlendes Semikolon, eine fehlende Klammer etc.

            Das sieht aber hier in Ordnung aus.
            Bist du sicher, dass der Code in deiner Datei identisch ist?
            Bist du sicher, dass sich kein unsichtbares (Steuer-)Zeichen ans Ende der Zeile gemogelt hat?

            Im Zweifel nochmal zurück kopieren aus deinem Beitrag in die Datei und alle Zeilenenden checken.

            Kommentar


            • #7
              Zitat von reddighamburg Beitrag anzeigen
              Im Zweifel nochmal zurück kopieren aus deinem Beitrag in die Datei und alle Zeilenenden checken.
              Ich habe das Skript mit zwei Query's erstellt. Mit dem ersten Query funktioniert es. Mit dem zweiten nicht.
              Query1:
              Code:
              root@dsme01:/etc/fail2ban# cat cron2ban_new.php
              #!/usr/bin/php
              <?php
              require_once((dirname(__FILE__)) . "/config_new.php");
              $curdate=date("Y-m-d H:i:s");
              // query PostgreSQL
              $query = "DELETE FROM fail2ban WHERE created < '$curdate'"; # Query 1
              // $query = "DELETE FROM fail2ban WHERE created < NOW() - INTERVAL 1 DAY";​ # Query 2
              $stmt = $link->prepare($query);
              $stmt->execute();
              if ($stmt->execute()) {
                  echo "IP delete in the DATABASE";
              } else {
                  echo "No Dataset delete";
              }
              exit;
              ?>
              ​
              Code:
              root@dsme01:/etc/fail2ban# ./cron2ban_new.php
              #!/usr/bin/php
              IP delete in the DATABASE​
              Code:
              root@dsme01:/etc/fail2ban# cat cron2ban_new.php
              #!/usr/bin/php
              <?php
              require_once((dirname(__FILE__)) . "/config_new.php");
              $curdate=date("Y-m-d H:i:s");
              // query PostgreSQL
              // $query = "DELETE FROM fail2ban WHERE created < '$curdate'"; # Query 1
              $query = "DELETE FROM fail2ban WHERE created < NOW() - INTERVAL 1 DAY";​ # Query 2
              $stmt = $link->prepare($query);
              $stmt->execute();
              if ($stmt->execute()) {
                  echo "IP delete in the DATABASE";
              } else {
                  echo "No Dataset delete";
              }
              exit;
              ?>
              ​
              Code:
              root@dsme01:/etc/fail2ban# ./cron2ban_new.php
              PHP Parse error:  syntax error, unexpected '$stmt' (T_VARIABLE) in /etc/fail2ban/cron2ban_new.php on line 8
              ​
              Zuletzt geändert von sharbich; 06.01.2025, 16:36.

              Kommentar


              • #8
                DELETE FROM fail2ban WHERE created < DATE_SUB(NOW() , INTERVAL 1 DAY)

                Kommentar


                • #9
                  Zitat von reddighamburg Beitrag anzeigen
                  DELETE FROM fail2ban WHERE created < DATE_SUB(NOW() , INTERVAL 1 DAY)
                  Das war es leider auch nicht. Ich erhalte jetzt folgende Fehlermeldung:
                  Code:
                  root@dsme01:/etc/fail2ban# cat cron2ban_new.php
                  #!/usr/bin/php
                  <?php
                  require_once((dirname(__FILE__)) . "/config_new.php");
                  $curdate=date("Y-m-d H:i:s");
                  // query PostgreSQL
                  // $query = "DELETE FROM fail2ban WHERE created < '$curdate'";                 # Query 1
                  $query = "DELETE FROM fail2ban WHERE created < DATE_SUB(NOW() , INTERVAL 1 DAY)" # Query 2
                  $stmt = $link->prepare($query);
                  $stmt->execute();
                  if ($stmt->execute()) {
                      echo "IP delete in the DATABASE";
                  } else {
                      echo "No Dataset delete";
                  }
                  exit;
                  ?>
                  root@dsme01:/etc/fail2ban# ./cron2ban_new.php
                  PHP Parse error:  syntax error, unexpected '$stmt' (T_VARIABLE) in /etc/fail2ban/cron2ban_new.php on line 8
                  ​

                  Kommentar


                  • #10
                    Einen Syntax-Error sollte man aber bitte schön selber finden können!

                    Es fehlt ein Semikolon in Zeile 7

                    Kommentar


                    • #11
                      Zitat von scatello Beitrag anzeigen
                      Einen Syntax-Error sollte man aber bitte schön selber finden können!
                      Das stimmt. Aber, auch mit Semikolon funktioniert es nicht.
                      Code:
                      root@dsme01:/etc/fail2ban# cat cron2ban_new.php
                      #!/usr/bin/php
                      <?php
                      require_once((dirname(__FILE__)) . "/config_new.php");
                      $curdate=date("Y-m-d H:i:s");
                      // query PostgreSQL
                      // $query = "DELETE FROM fail2ban WHERE created < '$curdate'";                 # Query 1
                      $query = "DELETE FROM fail2ban WHERE created < DATE_SUB(NOW() , INTERVAL 1 DAY)"; # Query 2
                      $stmt = $link->prepare($query);
                      $stmt->execute();
                      if ($stmt->execute()) {
                          echo "IP delete in the DATABASE";
                      } else {
                          echo "No Dataset delete";
                      }
                      exit;
                      ?>
                      root@dsme01:/etc/fail2ban# ./cron2ban_new.php
                      #!/usr/bin/php
                      PHP Fatal error:  Uncaught PDOException: SQLSTATE[42601]: Syntax error: 7 FEHLER:  Syntaxfehler bei »1«
                      LINE 1: ...OM fail2ban WHERE created < DATE_SUB(NOW() , INTERVAL 1 DAY)
                                                                                       ^ in /etc/fail2ban/cron2ban_new.php:9
                      Stack trace:
                      #0 /etc/fail2ban/cron2ban_new.php(9): PDOStatement->execute()
                      #1 {main}
                        thrown in /etc/fail2ban/cron2ban_new.php on line 9
                      ​

                      Kommentar

                      Lädt...
                      X