Modern Linux dağıtımlarında servislerin (arka planda çalışan programların) yönetimi systemd ile yapılır. Web sunucusunu başlatmak, bir uygulamayı sunucu açıldığında otomatik çalıştırmak veya çöken bir servisi yeniden ayağa kaldırmak — hepsi systemd'nin işidir. Bu rehberde systemd servis yönetimini systemctl ve journalctl komutlarıyla açıklıyoruz.
İlgili içerikler: Linux sunucu komutları · SSH ile sunucuya bağlanma · Nginx yapılandırma
systemd ve Servis (Unit) Nedir?
systemd, Linux'ta açılışta ilk çalışan süreçtir ve sistemdeki tüm servisleri yönetir. systemd'nin yönettiği her birime unit denir; en yaygın unit türü .service dosyalarıdır — yani arka planda çalışan programlar.
Bir servis; başlatılabilir, durdurulabilir, yeniden başlatılabilir ve sistem açılışında otomatik çalışacak şekilde etkinleştirilebilir. systemd ayrıca çöken servisleri otomatik yeniden başlatabilir ve her servisin loglarını merkezi olarak toplar.
systemctl ile Servis Yönetimi
Servisleri yönetmek için systemctl komutunu kullanırsınız. Temel işlemler şunlardır:
# Servisin durumunu görüntüle
systemctl status nginx
# Başlat / durdur / yeniden başlat
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
# Yapılandırmayı kesintisiz yeniden yükle
sudo systemctl reload nginx
Otomatik Başlatmayı Yönetme
Bir servisin sunucu her açıldığında otomatik çalışması için etkinleştirilmesi gerekir. start servisi yalnızca o an başlatır; enable ise açılışta başlamasını sağlar — ikisi farklıdır.
| Komut | İşlevi |
|---|---|
systemctl enable servis | Açılışta otomatik başlatmayı açar |
systemctl disable servis | Otomatik başlatmayı kapatır |
systemctl enable --now servis | Hem etkinleştirir hem hemen başlatır |
systemctl is-enabled servis | Otomatik başlatma durumunu gösterir |
Kendi Servisinizi Oluşturma
Kendi uygulamanızı (örneğin bir Node.js veya Python uygulaması) bir systemd servisi haline getirebilirsiniz. Bunun için /etc/systemd/system/ dizinine bir .service dosyası oluşturursunuz. Tipik bir servis dosyası üç bölümden oluşur: [Unit] (tanım ve bağımlılıklar), [Service] (nasıl çalıştırılacağı) ve [Install] (ne zaman etkinleştirileceği).
[Unit]
Description=Ornek Uygulama
After=network.target
[Service]
User=uygulama
WorkingDirectory=/opt/uygulama
ExecStart=/usr/bin/node server.js
Restart=always
[Install]
WantedBy=multi-user.target
Dosyayı oluşturduktan sonra systemd'ye yeni servisi tanıtmanız gerekir:
# Yeni/değişen unit dosyalarını yeniden oku
sudo systemctl daemon-reload
# Servisi etkinleştir ve başlat
sudo systemctl enable --now uygulama
Restart=always satırı, uygulamanız çökse bile systemd'nin onu otomatik yeniden başlatmasını sağlar — production ortamında kararlılık için önemlidir.journalctl ile Log İzleme
systemd, tüm servislerin loglarını merkezi olarak toplar; bunlara journalctl ile erişirsiniz: journalctl -u nginx belirli bir servisin loglarını, journalctl -u nginx -f ise logları canlı gösterir. Bu, bir servis neden başlamıyor sorusunun cevabını bulmanın en hızlı yoludur.
Sıkça Sorulan Sorular
enable ve start arasındaki fark nedir?
start servisi yalnızca o an başlatır; sunucu yeniden başlarsa servis kapalı gelir. enable servisi açılış listesine ekler. Production'da genelde ikisini birden istersiniz: enable --now.
Bir servis başlamıyor, ne yapmalıyım?
Önce systemctl status servis ile özet hatayı, ardından journalctl -u servis ile ayrıntılı logları inceleyin. Çoğu sorun yanlış dosya yolu, izin hatası veya port çakışmasıdır.
Servis dosyasını değiştirdim ama etkili olmadı?
Unit dosyasını her değiştirdiğinizde sudo systemctl daemon-reload çalıştırmanız, ardından servisi yeniden başlatmanız gerekir.
KEYDAL VPS ile uygulamalarınızı systemd servisleri olarak kararlı biçimde yayınlayın. KEYDAL VPS planlarını inceleyin