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
tags
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.