{"id":904,"date":"2025-11-25T12:45:37","date_gmt":"2025-11-25T11:45:37","guid":{"rendered":"https:\/\/whoami.lausitz-event.info\/?p=904"},"modified":"2025-11-25T13:15:42","modified_gmt":"2025-11-25T12:15:42","slug":"syslog-ng-und-logrotate","status":"publish","type":"post","link":"https:\/\/whoami.lausitz-event.info\/?p=904","title":{"rendered":"Syslog-ng und Logrotate"},"content":{"rendered":"\n\n<p>Das nachfolgende Script erstellt automatisch ein Logrotate aus den Logs \/var\/log\/datei1.log, \/var\/log\/datei2.log und \/var\/log\/datei3.log. Die einzelnen Logdateien m\u00fcssen in Zeile 10 des Scripts einmalig angegeben werden. Alle Logdateien werden gleich behandelt und rotieren t\u00e4glich f\u00fcr 7 Tage und werden dabei komprimiert. Der Job wird t\u00e4glich um 02:00 Uhr ausgef\u00fchrt.<\/p>\n\n\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n# ========================================\n# Script: setup-syslog-ng-logrotate-safe.sh\n# Zweck: Sichere Logrotate-Konfiguration f\u00fcr syslog-ng\n# ========================================\n\n# -----------------------------\n# Variablen: Logdateien\n# -----------------------------\nLOG_FILES=\"\/var\/log\/datei1.log \/var\/log\/datei2.log \/var\/log\/datei3.log\"\n\n# -----------------------------\n# Logrotate-Konfigurationsdatei\n# -----------------------------\nLOGROTATE_CONF=\"\/etc\/logrotate.d\/syslog-ng-custom\"\n\necho \"Pr\u00fcfe, ob syslog-ng l\u00e4uft...\"\n\nif pgrep syslog-ng &gt;\/dev\/null 2&gt;&amp;1; then\n    echo \"syslog-ng l\u00e4uft, copytruncate wird verwendet.\"\n    COPYTRUNCATE=\"copytruncate\"\nelse\n    echo \"syslog-ng l\u00e4uft nicht, copytruncate wird nicht ben\u00f6tigt.\"\n    COPYTRUNCATE=\"\"\nfi\n\necho \"Erstelle Logrotate-Konfiguration unter $LOGROTATE_CONF ...\"\n\nsudo tee \"$LOGROTATE_CONF\" &gt; \/dev\/null &lt;&lt;EOF\n$LOG_FILES {\n    daily\n    rotate 7\n    compress\n    missingok\n    notifempty\n    $COPYTRUNCATE\n}\nEOF\n\necho \"Logrotate-Konfiguration erstellt.\"\n\n# -----------------------------\n# Cronjob einrichten\n# -----------------------------\nCRON_JOB=\"0 2 * * * \/usr\/sbin\/logrotate $LOGROTATE_CONF\"\n\n# Pr\u00fcfen, ob Cronjob schon existiert\n(crontab -l 2&gt;\/dev\/null | grep -F \"$LOGROTATE_CONF\") &amp;&amp; EXISTING=true || EXISTING=false\n\nif &#91; \"$EXISTING\" = false ]; then\n    echo \"F\u00fcge Cronjob hinzu...\"\n    (crontab -l 2&gt;\/dev\/null; echo \"$CRON_JOB\") | crontab -\n    echo \"Cronjob hinzugef\u00fcgt: $CRON_JOB\"\nelse\n    echo \"Cronjob existiert bereits. Keine \u00c4nderungen vorgenommen.\"\nfi\n\necho \"Setup abgeschlossen.\"\n<\/code><\/pre>\n\n\n\n\n\n<p>F\u00fcr Faule ist das n\u00e4chste Script vielleicht interessanter. Habt ihr einen zentralen Syslog-Server, kommen unter Umst\u00e4nden neue Ger\u00e4te dazu, die Syslogdaten versenden. Werden diese vergessen, so hat man auf absehbare Zeit ein Platz Problem. Hier nimmt euch das Script diese Arbeit ab und bindet rekursiv alle Logdateien unterhalb des Verzeichnisses \/var\/log\/ in das Logrotate ein. Ihr k\u00f6nnt au\u00dferdem festlegen, wie gro\u00df die Logdateien sein m\u00fcssen, um ber\u00fccksichtigt zu werden.<\/p>\n\n\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n# ====================================================================\n# Script: setup-syslog-ng-logrotate-recursive-size.sh\n# Zweck:\n#   - Alle Logdateien in einem Ordner + Unterordner finden (rekursiv)\n#   - Nur Dateien ab einer Mindestgr\u00f6\u00dfe in Logrotate einbeziehen\n#   - Automatische Auswahl der Logdateien ohne manuelles Eintragen\n#   - Sicheres Logrotate f\u00fcr syslog-ng (mit copytruncate)\n# ====================================================================\n\n# ----------------------------------------------------------\n# CONFIG \u2013 bitte hier anpassen\n# ----------------------------------------------------------\n\n# Verzeichnis, in dem gesucht wird (rekursiv!)\nLOG_DIR=\"\/var\/log\"\n\n# Muster f\u00fcr Dateiendungen, z. B. \"*.log\", \"*.txt\", \"*\" f\u00fcr alle\nFILE_PATTERN=\"*.log\"\n\n# Mindestgr\u00f6\u00dfe f\u00fcr Ber\u00fccksichtigung\n# Beispiele:\n#   +0k  \u2192 alle Dateien\n#   +100k \u2192 nur >100 KB\n#   +1M   \u2192 nur >1 MB\nMIN_SIZE=\"+0k\"\n\n# Logrotate-Zieldatei\nLOGROTATE_CONF=\"\/etc\/logrotate.d\/syslog-ng-custom\"\n\n\n# ----------------------------------------------------------\n# Pr\u00fcfen, ob Verzeichnis existiert\n# ----------------------------------------------------------\nif &#91; ! -d \"$LOG_DIR\" ]; then\n    echo \"FEHLER: Das Verzeichnis $LOG_DIR existiert nicht.\"\n    exit 1\nfi\n\n\n# ----------------------------------------------------------\n# Logdateien rekursiv finden + Gr\u00f6\u00dfenfilter anwenden\n# ----------------------------------------------------------\necho \"Suche Logdateien rekursiv unter: $LOG_DIR\"\necho \"Filter: Pattern=$FILE_PATTERN, Mindestgr\u00f6\u00dfe=$MIN_SIZE\"\necho\n\nLOG_FILES=$(find \"$LOG_DIR\" -type f -name \"$FILE_PATTERN\" -size \"$MIN_SIZE\" | tr '\\n' ' ')\n\nif &#91; -z \"$LOG_FILES\" ]; then\n    echo \"WARNUNG: Keine Logdateien gefunden, die den Kriterien entsprechen.\"\n    exit 0\nfi\n\necho \"Gefundene Logdateien:\"\necho \"$LOG_FILES\"\necho\n\n\n# ----------------------------------------------------------\n# Pr\u00fcfen, ob syslog-ng l\u00e4uft\n# ----------------------------------------------------------\necho \"Pr\u00fcfe syslog-ng Status...\"\n\nif pgrep syslog-ng >\/dev\/null 2>&amp;1; then\n    echo \"syslog-ng l\u00e4uft \u2192 copytruncate wird aktiviert.\"\n    COPYTRUNCATE=\"copytruncate\"\nelse\n    echo \"syslog-ng l\u00e4uft nicht \u2192 copytruncate wird deaktiviert.\"\n    COPYTRUNCATE=\"\"\nfi\n\n\n# ----------------------------------------------------------\n# Logrotate-Konfiguration erstellen\n# ----------------------------------------------------------\necho\necho \"Erstelle Logrotate-Konfiguration unter:\"\necho \"  $LOGROTATE_CONF\"\necho\n\nsudo tee \"$LOGROTATE_CONF\" >\/dev\/null &lt;&lt;EOF\n$LOG_FILES {\n    daily\n    rotate 7\n    compress\n    missingok\n    notifempty\n    $COPYTRUNCATE\n}\nEOF\n\necho \"Logrotate-Konfiguration erstellt.\"\necho\n\n\n# ----------------------------------------------------------\n# Cronjob einrichten\n# ----------------------------------------------------------\nCRON_JOB=\"0 2 * * * \/usr\/sbin\/logrotate $LOGROTATE_CONF\"\n\ncrontab -l 2>\/dev\/null | grep -F \"$LOGROTATE_CONF\" >\/dev\/null\nif &#91; $? -eq 0 ]; then\n    echo \"Cronjob existiert bereits. Keine \u00c4nderungen.\"\nelse\n    echo \"F\u00fcge Cronjob hinzu...\"\n    (crontab -l 2>\/dev\/null; echo \"$CRON_JOB\") | crontab -\n    echo \"Cronjob hinzugef\u00fcgt.\"\nfi\n\necho\necho \"Setup abgeschlossen!\"\necho \"Logrotate \u00fcberwacht jetzt rekursiv alle Dateien in $LOG_DIR (Pattern: $FILE_PATTERN, Mindestgr\u00f6\u00dfe: $MIN_SIZE)\"\n<\/code><\/pre>\n\n\n\n\n\n<p>Zum Schluss erstellt ihr noch den passenden Cronjob dazu:<\/p>\n\n\n\n\n\n<pre class=\"wp-block-code\"><code>0 2 * * * \/usr\/sbin\/logrotate \/etc\/logrotate.d\/syslog-ng-custom<\/code><\/pre>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Das nachfolgende Script erstellt automatisch ein Logrotate aus den Logs \/var\/log\/datei1.log, \/var\/log\/datei2.log und \/var\/log\/datei3.log. Die einzelnen Logdateien m\u00fcssen in Zeile 10 des Scripts einmalig angegeben werden. Alle Logdateien werden gleich behandelt und rotieren t\u00e4glich f\u00fcr 7 Tage und werden dabei komprimiert. Der Job wird t\u00e4glich um 02:00 Uhr ausgef\u00fchrt. F\u00fcr Faule ist das n\u00e4chste Script [&hellip;]<\/p>","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[3,12],"tags":[],"class_list":["post-904","post","type-post","status-publish","format-standard","hentry","category-it","category-linux"],"_links":{"self":[{"href":"https:\/\/whoami.lausitz-event.info\/index.php?rest_route=\/wp\/v2\/posts\/904","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/whoami.lausitz-event.info\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/whoami.lausitz-event.info\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/whoami.lausitz-event.info\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/whoami.lausitz-event.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=904"}],"version-history":[{"count":5,"href":"https:\/\/whoami.lausitz-event.info\/index.php?rest_route=\/wp\/v2\/posts\/904\/revisions"}],"predecessor-version":[{"id":912,"href":"https:\/\/whoami.lausitz-event.info\/index.php?rest_route=\/wp\/v2\/posts\/904\/revisions\/912"}],"wp:attachment":[{"href":"https:\/\/whoami.lausitz-event.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=904"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/whoami.lausitz-event.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=904"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/whoami.lausitz-event.info\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=904"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}