Ontwikkel een Bash of PowerShell Script voor Geavanceerde Automatische Foutdetectie en Herstel op Servers
description
Met deze prompt kun je een geavanceerd script creëren dat niet alleen serverfouten automatisch detecteert, maar ook zelfstandig herstel uitvoert en fouten logt. Dit vermindert downtime, versnelt probleemoplossing en zorgt voor een stabielere serveromgeving, waardoor je efficiënter serverbeheer kunt voeren dan met handmatige monitoring.
prompt
Help me een Bash- of PowerShell-script te maken dat automatisch serverfouten detecteert, diagnosticeert en herstelt. Fouttypes om te monitoren: <voer de fouttypes in die je wilt detecteren ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een eenvoudig Bash-script dat je kunt gebruiken om serverfouten te detecteren, te diagnosticeren en hersteltaken uit te voeren. Dit script controleert op webserver crashes (bijvoorbeeld op Apache of Nginx) en diskruimteproblemen. Het logt alle activiteiten in `/var/log/server_error.log` en voert automatische herstelacties uit zoals de webserver herstarten en oude logbestanden verwijderen.
```bash
#!/bin/bash
# Logbestand
LOGFILE="/var/log/server_error.log"
# Webserver processen
WEBSERVERS=("apache2" "nginx")
# Diskruimte drempel percentage
DISK_THRESHOLD=10
# Functie om te loggen
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOGFILE"
}
# Check webserver status
check_webserver() {
for server in "${WEBSERVERS[@]}"; do
if ! pgrep -x "$server" > /dev/null; then
log "Webserver $server niet actief. Herstart wordt geprobeerd."
systemctl restart "$server"
if pgrep -x "$server" > /dev/null; then
log "Webserver $server succesvol herstart."
else
log "Fout bij het herstarten van $server."
fi
fi
done
}
# Check diskruimte
check_disk_space() {
# Controleer alle gemonteerde bestanden systemen
df -H --exclude-type=tmpfs --exclude-type=devtmpfs | while read -r line; do
# Parse het output
used=$(echo "$line" | awk '{print $5}' | sed 's/%//')
mount_point=$(echo "$line" | awk '{print $6}')
if [ "$used" -ge "$DISK_THRESHOLD" ]; then
log "Waarschuwing: Schijf op $mount_point is voor $used% vol."
# Optioneel: verwijder oude logs in een specifieke directory
LOGDIR="/var/log/oude_logs"
if [ -d "$LOGDIR" ]; then
find "$LOGDIR" -type f -mtime +30 -exec rm -f {} \; -exec log "Verwijderd oud logbestand: {}" \;
fi
fi
done
}
# Main controlefunctie
main() {
check_webserver
check_disk_space
}
# Uitvoeren
main
```
**Gebruik:**
- Sla dit script op als bijvoorbeeld `/usr/local/bin/server_monitor.sh`.
- Maak het uitvoerbaar met `chmod +x /usr/local/bin/server_monitor.sh`.
- Plan het bijvoorbeeld met cron om regelmatig te draaien, zoals elke 5 minuten:
```bash
*/5 * * * * /usr/local/bin/server_monitor.sh
```
**Opmerking:**
- Pas de webserver namen en logbestandslocaties aan indien nodig.
- Zorg dat het script voldoende rechten heeft om services te herstarten en logs te verwijderen.
provider: deepseek
model: deepseek-chat
Ik zal je helpen een Bash-script te maken voor deze taak. Hier is een compleet script:
```bash
#!/bin/bash
# Configuratie
LOG_FILE="/var/log/server_error.log"
DISK_SPACE_THRESHOLD=90
WEBSERVER_SERVICE="apache2" # Verander naar "nginx" of andere webserver
# Functie om te loggen
log_error() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# Functie om webserver status te controleren
check_webserver() {
if ! systemctl is-active --quiet "$WEBSERVER_SERVICE"; then
log_error "WEBSERVER CRASH: $WEBSERVER_SERVICE is niet actief"
restart_webserver
return 1
fi
return 0
}
# Functie om schijfruimte te controleren
check_disk_space() {
local usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$usage" -ge "$DISK_SPACE_THRESHOLD" ]; then
log_error "DISK SPACE ERROR: Schijfruimte is $usage% (drempel: $DISK_SPACE_THRESHOLD%)"
cleanup_old_logs
return 1
fi
return 0
}
# Functie om webserver te herstarten
restart_webserver() {
log_error "Herstarten van $WEBSERVER_SERVICE..."
systemctl restart "$WEBSERVER_SERVICE"
if systemctl is-active --quiet "$WEBSERVER_SERVICE"; then
log_error "Herstart succesvol: $WEBSERVER_SERVICE is nu actief"
else
log_error "Herstart mislukt: $WEBSERVER_SERVICE kon niet worden gestart"
fi
}
# Functie om oude logbestanden op te ruimen
cleanup_old_logs() {
log_error "Opruimen oude logbestanden..."
# Verwijder logbestanden ouder dan 30 dagen
find /var/log -name "*.log" -type f -mtime +30 -delete 2>/dev/null
find /var/log -name "*.gz" -type f -mtime +30 -delete 2>/dev/null
# Ruim tijdelijke bestanden op
rm -rf /tmp/* 2>/dev/null
rm -rf /var/tmp/* 2>/dev/null
log_error "Opruimen voltooid"
}
# Hoofdfunctie
main() {
log_error "=== Monitoring gestart ==="
# Controleer webserver
if ! check_webserver; then
log_error "Webserver probleem gedetecteerd en aangepakt"
fi
# Controleer schijfruimte
if ! check_disk_space; then
log_error "Schijfruimte probleem gedetecteerd en aangepakt"
fi
log_error "=== Monitoring voltooid ==="
}
# Script uitvoeren
main
```
**Installatie en gebruik:**
1. **Script opslaan:**
```bash
sudo nano /usr/local/bin/server_monitor.sh
```
2. **Uitvoerbaar maken:**
```bash
sudo chmod +x /usr/local/bin/server_monitor.sh
```
3. **Cronjob toevoegen (elke 5 minuten):**
```bash
sudo crontab -e
```
Voeg toe:
```bash
*/5 * * * * /usr/local/bin/server_monitor.sh
```
4. **Log directory aanmaken (indien nodig):**
```bash
sudo mkdir -p /var/log
sudo touch /var/log/server_error.log
sudo chmod 644 /var/log/server_error.log
```
**Aanpassingen die je mogelijk moet maken:**
- Pas `WEBSERVER_SERVICE` aan naar jouw webserver (apache2, nginx, httpd)
- Pas `DISK_SPACE_THRESHOLD` aan naar gewenste percentage
- Voeg eventueel extra cleanup regels toe in `cleanup_old_logs()`
**Belangrijke opmerkingen:**
- Test het script eerst handmatig
- Controleer de logfile regelmatig
- Pas de cleanup parameters aan op basis van je specifieke needs
- Zorg voor adequate backups voordat je automatische cleanup implementeert
Het script zal automatisch monitoren en problemen oplossen volgens je specificaties!