Ubuntu Otomatik Bakım ve Raporlama
Bu rehberde, birden fazla Ubuntu ve HestiaCP sunucusunda haftalık sistem bakımlarını (update, upgrade, autoremove, clean) otomatikleştiren ve sonuçları Gmail/Google Workspace altyapısıyla şık bir HTML e-posta raporu olarak gönderen tek tıkla kurulum betiğini bulabilirsiniz.
📌 Ön Gereksinimler
Google Workspace veya Gmail hesabınızdan alınmış 16 haneli bir Uygulama Parolası (App Password) gereklidir.
1
Kurulum Betiğini Oluşturun
Sunucunuzda geçici bir kurulum dosyası açın:
Bash
sudo nano /tmp/kur.sh
Aşağıdaki betik kodunu kopyalayıp dosyanın içine yapıştırın. Yapıştırmadan önce BURAYA_GMAIL_UYGULAMA_PAROLASI_GELECEK alanına kendi şifrenizi girin:
/tmp/kur.sh
#!/bin/bash
echo "=== Auto Maintenance Setup Başlatılıyor ==="
# 1. MSMTP Yükleme (Exim/HestiaCP yapılandırmasını bozmaz)
echo "[1/5] MSMTP yükleniyor..."
export DEBIAN_FRONTEND=noninteractive
apt-get update -qq
apt-get install -y msmtp msmtp-mta > /dev/null 2>&1
# Sendmail Sembolik Link
if [ ! -L /usr/sbin/sendmail ] && [ ! -f /usr/sbin/sendmail ]; then
ln -s /usr/bin/msmtp /usr/sbin/sendmail
fi
# 2. Log Dosyası Oluşturma ve İzin Verilme
touch /var/log/msmtp.log
chmod 666 /var/log/msmtp.log
# 3. MSMTP Yapılandırması
echo "[2/5] SMTP yapılandırması oluşturuluyor..."
cat <<'EOF' > /etc/msmtprc
defaults
auth on
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.log
account workspace
host smtp.gmail.com
port 587
from alert@arifakyuz.com
user alert@arifakyuz.com
password BURAYA_GMAIL_UYGULAMA_PAROLASI_GELECEK
account default : workspace
EOF
chmod 600 /etc/msmtprc
# 4. Bakım Script'i Oluşturma
echo "[3/5] Bakım betiği hazırlanıyor..."
cat <<'EOF' > /usr/local/bin/haftalik_bakim.sh
#!/bin/bash
LOG_FILE="/var/log/haftalik_bakim.log"
ALICI="info@arifakyuz.com"
GONDEREN="alert@arifakyuz.com"
SUNUCU_ADI=$(hostname)
TARIH=$(date '+%d.%m.%Y %H:%M')
# Güncellenecek paketleri tespit et
UPDATED_PACKAGES=$(apt list --upgradable 2>/dev/null | grep -v "Listing..." | cut -d/ -f1)
PACKAGE_COUNT=$(echo "$UPDATED_PACKAGES" | grep -c -v '^$' || true)
if [ "$PACKAGE_COUNT" -gt 0 ]; then
PACKAGES_HTML=$(echo "$UPDATED_PACKAGES" | sed 's/$/<br>/' | tr -d '\n')
else
PACKAGES_HTML="Güncellenen paket bulunmuyor (Sistem güncel)."
fi
# Log dosyasını başlat
echo "=== Bakım Başladı: $TARIH ===" > $LOG_FILE
# Bakım komutlarını çalıştır
{
apt update && \
apt upgrade -y && \
apt autoremove -y && \
apt clean
} >> $LOG_FILE 2>&1
STATUS=$?
if [ $STATUS -eq 0 ]; then
BASLIK="✅ [$SUNUCU_ADI] Haftalık Bakım Başarıyla Tamamlandı"
STATUS_COLOR="#10b981"
STATUS_TEXT="BAŞARILI"
STATUS_BG="#d1fae5"
else
BASLIK="❌ [$SUNUCU_ADI] Haftalık Bakımda Hata Oluştu"
STATUS_COLOR="#ef4444"
STATUS_TEXT="HATA ALINDI"
STATUS_BG="#fee2e2"
fi
LOG_CONTENT=$(tail -n 25 $LOG_FILE | sed 's/&/\&/g; s/</\</g; s/>/\>/g')
# Doğrudan MSMTP ile HTML e-posta gönderimi
(
cat <<EOMAIL
To: $ALICI
From: $GONDEREN
Subject: $BASLIK
MIME-Version: 1.0
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"></head>
<body style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; background-color: #f3f4f6; margin: 0; padding: 20px;">
<div style="max-width: 600px; margin: 0 auto; background-color: #ffffff; border-radius: 8px; overflow: hidden; box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1);">
<div style="background-color: #1e293b; color: #ffffff; padding: 24px; text-align: center;">
<h2 style="margin: 0; font-size: 20px; font-weight: 600;">Sistem Bakım Raporu</h2>
<p style="margin: 5px 0 0 0; color: #94a3b8; font-size: 14px;">$SUNUCU_ADI</p>
</div>
<div style="padding: 24px;">
<div style="background-color: #f8fafc; border: 1px solid #e2e8f0; border-radius: 6px; padding: 16px; margin-bottom: 20px;">
<table style="width: 100%; border-collapse: collapse;">
<tr>
<td style="color: #64748b; font-size: 14px; padding: 4px 0;">İşlem Durumu:</td>
<td style="text-align: right; padding: 4px 0;">
<span style="background-color: $STATUS_BG; color: $STATUS_COLOR; padding: 4px 12px; border-radius: 12px; font-weight: bold; font-size: 12px;">$STATUS_TEXT</span>
</td>
</tr>
<tr>
<td style="color: #64748b; font-size: 14px; padding: 4px 0;">Güncellenen Paket Sayısı:</td>
<td style="text-align: right; font-weight: 600; font-size: 14px; color: #0284c7; padding: 4px 0;">$PACKAGE_COUNT Adet</td>
</tr>
<tr>
<td style="color: #64748b; font-size: 14px; padding: 4px 0;">Tarih / Saat:</td>
<td style="text-align: right; font-weight: 500; font-size: 14px; color: #1e293b; padding: 4px 0;">$TARIH</td>
</tr>
<tr>
<td style="color: #64748b; font-size: 14px; padding: 4px 0;">Sunucu:</td>
<td style="text-align: right; font-weight: 500; font-size: 14px; color: #1e293b; padding: 4px 0;">$SUNUCU_ADI</td>
</tr>
</table>
</div>
<h4 style="margin: 0 0 10px 0; color: #334155; font-size: 14px;">Güncellenen / İşlem Gören Paketler:</h4>
<div style="background-color: #f1f5f9; color: #334155; font-family: monospace; font-size: 12px; padding: 12px; border-radius: 6px; margin-bottom: 20px; max-height: 150px; overflow-y: auto;">
$PACKAGES_HTML
</div>
<h4 style="margin: 0 0 10px 0; color: #334155; font-size: 14px;">Terminal Çıktı Özeti (Son 25 Satır):</h4>
<div style="background-color: #0f172a; color: #38bdf8; font-family: monospace; font-size: 12px; padding: 14px; border-radius: 6px; overflow-x: auto; white-space: pre-wrap; word-break: break-all;">
$LOG_CONTENT
</div>
</div>
<div style="background-color: #f8fafc; border-top: 1px solid #e2e8f0; padding: 16px; text-align: center; color: #94a3b8; font-size: 12px;">
HestiaCP Otomatik Bakım Servisi
</div>
</div>
</body>
</html>
EOMAIL
) | msmtp -a workspace "$ALICI"
EOF
chmod +x /usr/local/bin/haftalik_bakim.sh
touch /var/log/haftalik_bakim.log
# 5. Crontab Görevi Ekleme (Her Pazar 03:00)
echo "[4/5] Crontab ayarlanıyor..."
(crontab -l 2>/dev/null | grep -v "/usr/local/bin/haftalik_bakim.sh" ; echo "0 3 * * 0 /usr/local/bin/haftalik_bakim.sh") | crontab -
echo "[5/5] Kurulum Tamamlandı! Rapor gönderiliyor..."
/usr/local/bin/haftalik_bakim.sh
2
Kurulumu Başlatın
Dosyaya çalıştırma yetkisi verip tek satırda kurulumu tamamlayın:
Terminal
chmod +x /tmp/kur.sh && sudo /tmp/kur.sh
3
Yönetim ve Kontrol Komutları
Kurulum sonrasında sistemi kontrol etmek veya manuel tetiklemek için kullanabileceğiniz komutlar:
- Crontab Kontrolü:
crontab -l | grep haftalik_bakim - Elle Test Çalıştırması:
sudo /usr/local/bin/haftalik_bakim.sh - SMTP Log İnceleme:
cat /var/log/msmtp.log - Bakım Log İnceleme:
cat /var/log/haftalik_bakim.log