slogan3

Ontwikkel een Bash of PowerShell Script voor Geautomatiseerde Server Log Rotatie en Archivering

description

Met deze prompt kun je eenvoudig een script maken dat automatisch logbestanden beheert door ze op tijd te roteren en te archiveren. Dit voorkomt dat logs te veel schijfruimte innemen, verhoogt de serverstabiliteit en maakt het bewaren van historische data overzichtelijk en veilig. Het bespaart handmatig werk en minimaliseert risico's op mislukte logrotatie.

prompt

Help me een Bash of PowerShell script te maken dat automatisch serverlogbestanden roteert en archiveert om schijfruimte te beheren en historische gegevens te bewaren. Logbestanden om te roteren: <voer de paden van logbestanden in> Rotatie-interval: <geef aan ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorbeeld van een Bash-script dat automatisch serverlogbestanden roteert en archiveert volgens jouw specificaties: ```bash #!/bin/bash # Configuratie LOGBESTANDEN=("/var/log/syslog" "/var/log/auth.log") ARCHIEFDOEL=/var/log/archive RETENTIEDAGEN=30 # Zorg dat de archiefmap bestaat mkdir -p "$ARCHIEFDOEL" # Datum voor bestandsnaam DATUM=$(date +"%Y-%m-%d") for LOG in "${LOGBESTANDEN[@]}"; do BASENAME=$(basename "$LOG") ARCHIEFNAME="${ARCHIEFDOEL}/${BASENAME}-${DATUM}.gz" # Controleer of het logbestand bestaat if [ -f "$LOG" ]; then # Maak een nieuwe kopie en comprimeer cp "$LOG" "${LOG}.bak" gzip -c "$LOG" > "$ARCHIEFNAME" # Leeg het originele logbestand : > "$LOG" # Verwijder oude archieven ouder dan RETENTIEDAGEN find "$ARCHIEFDOEL" -name "${BASENAME}-*.gz" -type f -mtime +$RETENTIEDAGEN -delete fi done ``` **Gebruik:** - Sla dit script op bijvoorbeeld als `/usr/local/bin/logrotatie.sh`. - Maak het uitvoerbaar: `chmod +x /usr/local/bin/logrotatie.sh`. - Plan het script via cron om dagelijks te draaien: ```bash sudo crontab -e ``` En voeg de regel toe: ```cron 0 0 * * * /usr/local/bin/logrotatie.sh ``` **Let op:** - Pas indien nodig de paden of configuratie aan. - Zorg dat het script voldoende rechten heeft om logs te lezen en te schrijven in de archiefmap. - Voor PowerShell op Windows zou een vergelijkbaar script er anders uitzien, maar aangezien je serverlogbestanden op Linux staan, is Bash passend.
provider: deepseek
model: deepseek-chat
Hier is een Bash-script dat logrotatie uitvoert volgens uw specificaties: ```bash #!/bin/bash # Configuratie LOG_FILES=("/var/log/syslog" "/var/log/auth.log") ARCHIVE_DIR="/var/log/archive" RETENTION_DAYS=30 DATE_SUFFIX=$(date +"%Y-%m-%d") # Controleer of archive directory bestaat mkdir -p "$ARCHIVE_DIR" # Functie om logbestand te roteren rotate_log() { local log_file="$1" if [ -f "$log_file" ]; then # Kopieer het logbestand naar archive met datum suffix cp "${log_file}" "${ARCHIVE_DIR}/$(basename ${log_file}).${DATE_SUFFIX}" # Maak het oorspronkelijke logbestand leeg > "$log_file" echo "Geroteerd: ${log_file} -> ${ARCHIVE_DIR}/$(basename ${log_file}).${DATE_SUFFIX}" else echo "Waarschuwing: ${log_file} niet gevonden" fi } # Functie om oude archives op te ruimen cleanup_old_archives() { find "$ARCHIVE_DIR" -name "*.${DATE_SUFFIX%%-*}-*" -type f -mtime +$RETENTION_DAYS -delete echo "Oude archives (> ${RETENTION_DAYS} dagen) opgeruimd" } # Hoofdscript echo "Start logrotatie op $(date)" # Roteer alle logbestanden for log_file in "${LOG_FILES[@]}"; do rotate_log "$log_file" done # Ruim oude archives op cleanup_old_archives echo "Logrotatie voltooid op $(date)" ``` **Installatie en gebruik:** 1. Sla het script op als `logrotate-custom.sh` 2. Maak het uitvoerbaar: `chmod +x logrotate-custom.sh` 3. Test het script: `sudo ./logrotate-custom.sh` 4. Voeg toe aan crontab voor dagelijkse uitvoering: ```bash sudo crontab -e ``` Voeg deze regel toe: ``` 0 2 * * * /pad/naar/logrotate-custom.sh ``` **Belangrijke opmerkingen:** - Voer het script uit met `sudo` omdat het schrijfrechten nodig heeft in `/var/log/` - Het script behoudt de originele logbestanden maar maakt ze leeg na archivering - Archives worden opgeslagen als `bestandsnaam.YYYY-MM-DD` - Oude archives (>30 dagen) worden automatisch verwijderd - Controleer of de archive directory voldoende schijfruimte heeft **Alternatief met logrotate (aanbevolen):** U kunt ook de bestaande `logrotate` tool gebruiken door een configuratiebestand te maken: ```bash # Maak configuratiebestand: /etc/logrotate.d/custom-logs sudo nano /etc/logrotate.d/custom-logs ``` Voeg deze inhoud toe: ``` /var/log/syslog /var/log/auth.log { daily missingok rotate 30 compress delaycompress notifempty create 0640 root root postrotate /usr/lib/rsyslog/rsyslog-rotate endscript } ``` Dit is de standaard en meest robuuste methode voor logrotatie op Linux-systemen.