Daha önce şu yazımda Linux'ta beklenmeyen kapanmaların nasıl tespit edileceğini yazmıştım. O yazımda da bahsettiğim ve bu yazının altında yer alan adreslerde de kullanımından bahsedilen systemd birim dosyası ile beklenmeyen kapanmaların tespit edilmesi yöntemine journal loglarını da dahil ettim, bu konuyu da paylaşmak istedim.
Hedefimiz şu:
1. İşletim sistemi düzgün kapatılırken /root/graceful_shutdown dosyasını yazsın. İçi boş bir dosya. Sadece varlığı, kapanmanın düzgün olduğunu gösterecek. Kapatılırken de journal'a "graceful shutdown" yazsın.
2. Açılışta ilk adımda oluşturulan /root/graceful_shutdown dosyasının varlığı kontrol edilsin. Dosya varsa silinsin (çünkü kapatılırken tekrar oluşturulacak) ve journal'a "startup found graceful shutdown" yazsın.
3. Açılışta /root/graceful_shutdown dosyası yoksa journal'a "startup did not find graceful shotdown" gibi bir mesaz yazsın.
Bu hedef doğrultusunda 3 systemd birim dosyası oluşturacağız. Konumumuz /etc/systemd/system klasörü. İlk dosyamız birinci hedefimiz ile ilgili. Aşağıdaki dosyayı /etc/systemd/system/set_gracefulshutdown.service olarak kaydedelim.
Description=Set flag for graceful shutdown
DefaultDependencies=no
RefuseManualStart=true
Before=shutdown.target
[Service]
Type=oneshot
ExecStart=/bin/touch /root/graceful_shutdown
[Install]
WantedBy=shutdown.target
İkinci hedefimiz için aşağıdaki dosyayı /etc/systemd/system/check_graceful.service olarak kaydedelim.
Description=Check if previous system shutdown was graceful
ConditionPathExists=/root/graceful_shutdown
RefuseManualStart=true
RefuseManualStop=true
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/rm /root/graceful_shutdown
[Install]
WantedBy=multi-user.target
Üçüncü hedefimiz için de aşağıdaki dosyayı /etc/systemd/system/check_notgraceful.service konumuna kaydedelim. Bunun yegane amacı sistem loglarına bir düzgün kapanma olmadığını yazabilmek.
Description=Detect unexpected shutdown
ConditionPathExists=!/root/graceful_shutdown
RefuseManualStart=true
RefuseManualStop=true
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=logger "startup did not find graceful shutdown"
[Install]
WantedBy=multi-user.target
Sonra bunları etkinleştirmek için şu adımları uygulayalım:
# sudo systemctl enable set_gracefulshutdown
# sudo systemctl enable check_graceful
# sudo systemctl enable check_notgraceful
İşletim sistemi açıldıktan sonra da bir önceki kapanışın beklenmeyen bir kapanış mı olduğunu anlamak için check_graceful hizmetinin başlayıp başlamadığını kontrol edebiliriz:
# systemctl is-active check_graceful
ya da journalctl ile son 3 günlük loglarda graceful geçip geçmediğine bakabiliriz:
# journalctl --since "3 days ago" -g graceful
Galiba oldu. logger yerine systemd-cat kullanılabilir. Bu komutun -p ile mesajın öncelik seviyesi de belirtilebilir:
# echo "No graceful_shutdown file found" | systemd-cat -p info
gibi.
Bu dosyaları oluşturuken yaşanabilecek muhtemel yazım hatalarını tespit edebilmek için systemd-analyze'ın verify komutunu da kullanabiliri.
# systemd-analyze verify /etc/systemd/system/check_notgraceful.service
[12/2023]
---
Hiç yorum yok:
Yorum Gönder