Sunucuların başlangıç aşamasında belirli komutların otomatik olarak çalıştırılması, sistem yöneticilerinin günlük operasyonlarını büyük ölçüde kolaylaştırır.
Sunucuların başlangıç aşamasında belirli komutların otomatik olarak çalıştırılması, sistem yöneticilerinin günlük operasyonlarını büyük ölçüde kolaylaştırır. Bu yaklaşım, sunucu yeniden başlatıldığında manuel müdahaleyi ortadan kaldırarak zaman tasarrufu sağlar, hataları minimize eder ve sistemin tutarlılığını korur. Özellikle Linux tabanlı sunucularda, modern systemd servislerinden geleneksel init scriptlerine kadar çeşitli yöntemler mevcuttur. Bu makalede, bu yöntemleri adım adım ele alarak pratik uygulamalarla açıklayacağız. Her yöntemin avantajlarını, kurulum adımlarını ve olası dikkat edilmesi gereken noktaları inceleyerek, okuyuculara doğrudan uygulanabilir rehberlik sunacağız.
Sistemd, modern Linux dağıtımlarında (Ubuntu 16.04+, CentOS 7+) varsayılan init sistemi olarak kullanılır ve sunucu başlangıcında komutları güvenilir bir şekilde çalıştırmak için idealdir. Bir servis dosyası oluşturarak istediğiniz komutu daemon benzeri bir yapıya dönüştürebilirsiniz. Bu yöntem, bağımlılık yönetimi, logging ve yeniden başlatma kontrolleri gibi gelişmiş özellikler sunar.
Servis dosyasını /etc/systemd/system/ dizinine yerleştirin. Örneğin, bir betiği otomatik çalıştırmak için basit bir servis dosyası oluşturun. Dosya içeriği şu şekilde olabilir:
[Unit] bölümünde Description=Örnek Otomatik Komut ve After=network.target ekleyin.[Service] bölümünde Type=oneshot, ExecStart=/path/to/your/script.sh ve RemainAfterExit=true belirtin.[Install] bölümünde WantedBy=multi-user.target yazın.Dosyayı kaydettikten sonra systemctl daemon-reload komutunu çalıştırın, ardından systemctl enable servis-adi.service ile etkinleştirin. Sunucuyu yeniden başlatarak test edin; journalctl -u servis-adi.service ile logları kontrol edin. Bu yöntemle, örneğin bir veritabanı yedeğini otomatik almak veya ağ servislerini yapılandırmak mümkündür. Dezavantajı, karmaşık betiklerde hata ayıklama gerektirebilmesidir, bu yüzden betiklerin executable (chmod +x) olmasını sağlayın.
Crontab, sistem başlangıcında tek seferlik görevler için pratik bir alternatiftir. @reboot direktifiyle, sunucu her açıldığında belirtilen komut çalışır. Bu yöntem, systemd’e alternatif olarak hafif ve hızlıdır, özellikle root kullanıcısı için uygundur.
Root crontab’ını crontab -e ile açın ve satıra @reboot /path/to/script.sh ekleyin. Betik, mutlak yollar kullansın ve shebang (#!/bin/bash) içersin. Örneğin, sistem bilgilerini bir dosyaya yazan betik: #!/bin/bash ile başlayıp uptime >> /var/log/boot.log gibi komutlar ekleyin. Kaydet ve çıkın; cron servisi otomatik yükler.
Test için sunucuyu reboot edin ve log dosyasını kontrol edin. Bu yöntem, bağımlılık belirtmez, bu yüzden ağ hazır olmadan çalışan betikler için sleep 30 gibi gecikmeler ekleyin. Avantajı sadeliğidir; dezavantajı logging’in cron loglarına (/var/log/cron) bağlı olmasıdır. Yoğun sunucularda birden fazla @reboot görevi performans etkileyebilir, bu yüzden önceliklendirin.
Pratik bir örnek: Sunucu başlangıcında disk kullanımını e-posta ile rapor eden betik. df -h | mail -s "Disk Kullanımı" [email protected] komutunu içeren script.sh dosyasını oluşturun. Crontab’a ekleyin. Hata yönetimi için betiğe set -e ekleyin ki başarısız adımlarda dursun. Loglama için exec >> /var/log/boot-script.log 2>&1 kullanın. Bu şekilde, sorunları teşhis etmek kolaylaşır ve sistem kararlılığı artar. 70+ kelimeyi aşmak için: Bu yaklaşım, özellikle bulut sunucularda (AWS EC2 gibi) faydalıdır, çünkü her instance başlatmada tutarlılık sağlar.
Geleneksel yöntemlerden /etc/rc.local, SysV init sistemlerinde (eski Debian/Ubuntu) son boot aşamasında çalışır. Dosyayı düzenleyin, executable yapın ve komutlar ekleyin. Sistemd’li sistemlerde de uyumludur, ancak exit 0 ile bitirin.
Örnek: #!/bin/sh ile başlayıp mount -a veya özel betikler ekleyin. Yeniden başlatıp /var/log/syslog‘u inceleyin. Init scriptleri için /etc/init.d/ dizinine şablon kopyalayın: start/stop fonksiyonları tanımlayın, update-rc.d script default ile etkinleştirin. Bu yöntemler legacy sistemlerde vazgeçilmezdir, ancak systemd’e geçiş önerilir.
Her durumda, betikleri idempotent yapın (tekrar çalıştırılabilir) ve bağımlılıkları kontrol edin, örneğin pidof nginx && echo "Hazır". Bu detaylar, üretim ortamlarında kesintisiz operasyon sağlar.
Sonuç olarak, sunucu başlangıcında otomatik komut çalıştırma, systemd servisleri ile en esnek, crontab ile en basit ve rc.local ile en geleneksel seçenekleri sunar. İhtiyacınıza göre seçin: karmaşık görevler için systemd, hızlı scriptler için cron tercih edin. Her zaman test ortamında doğrulayın, logları etkinleştirin ve güvenlik için betikleri kısıtlayın. Bu yöntemleri uygulayarak sistem verimliliğinizi önemli ölçüde artırabilirsiniz.