Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

Linux servisini açılışta başlatma​


Linux'ta bir servisin açılışta otomatik başlaması için sisteminiz systemd kullanıyorsa önce mevcut servis birimini belirleyip sudo systemctl enable servis.service komutunu çalıştırmanız gerekir. Servisi hemen başlatmak için sudo systemctl start servis.service, ikisini tek adımda yapmak için sudo systemctl enable --now servis.service kullanılır.

Ön koşulu kontrol edin​


Bu anlatım systemd kullanan dağıtımlar içindir. Önce init sistemini kontrol edin:

Kod:
ps -p 1 -o comm=

Çıktı systemd ise aşağıdaki yöntemi uygulayabilirsiniz. Farklı bir çıktı alırsanız systemctl komutları doğrudan çalışmayabilir; dağıtımınızın kullandığı init sistemine ait yöntemi kullanmanız gerekir.

Çalıştırılabilir örnek servis oluşturma​


Paketle gelen servis zaten varsa yeni dosya oluşturmayın; systemctl cat servis.service ile tanımını inceleyip gerçek adını enable komutunda kullanın. Aşağıdaki ek örnek, modern systemd destekli bir test makinesinde sürekli bekleyen bir işlem oluşturur. Amaç, servis dosyasının doğru yerleştirilmesini ve açılışta etkinleştirilmesini güvenli biçimde doğrulamaktır. Örnek yolların ikisinin de bulunmadığını önceden doğrulayın; varsa mevcut dosyaların üzerine yazmayın ve bu örneğe devam etmeyin. Komutlar sistem servisi oluşturur, sıradan okuma değildir. Terminalde sırayla çalıştırın:

  1. Servis programını oluşturun:
    Kod:
    sudo tee /usr/local/bin/ornek-servis.sh >/dev/null <<'EOF'
    #!/bin/sh
    while :; do
        sleep 60
    done
    EOF
    sudo chmod 0755 /usr/local/bin/ornek-servis.sh
  2. Systemd birim dosyasını oluşturun:
    Kod:
    sudo tee /etc/systemd/system/ornek-servis.service >/dev/null <<'EOF'
    [Unit]
    Description=Ornek Linux servisi
    
    [Service]
    Type=simple
    DynamicUser=yes
    ExecStart=/usr/local/bin/ornek-servis.sh
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    EOF
  3. Yeni birim dosyasını systemd'ye okutun:
    Kod:
    sudo systemctl daemon-reload
  4. Servisi hemen başlatın ve sonraki açılışlar için etkinleştirin:
    Kod:
    sudo systemctl enable --now ornek-servis.service
  5. Durumu ve açılışta etkin olup olmadığını kontrol edin:
    Kod:
    systemctl is-enabled ornek-servis.service
    systemctl status ornek-servis.service --no-pager

Başarılı durumda ilk komut enabled, durum çıktısında ise Active: active (running) görülür. enable yalnızca açılış bağlantısını oluşturur; --now seçeneği mevcut oturumda da başlatır. Bu örnek dinamik, ayrıcalıksız kullanıcıyla boşta bekler; DynamicUser desteği bulunmayan ortamda ayarı rastgele çıkarmak yerine mevcut dağıtımınızın servis yöntemini kullanın. Deneme tamamlanınca yalnız oluşturduğunuz bu servisi sudo systemctl disable --now ornek-servis.service ile durdurabilirsiniz; dosyaları silmek gerekmez. kendi uygulamanızı kullanacaksanız ExecStart satırını uygulamanın tam yolu ve gerekli parametreleriyle değiştirmelisiniz.

Temel systemctl işlemleri​


Hangi komutun ne yaptığını bilmek, servisin açılışta çalışmasıyla mevcut anda çalışmasını karıştırmanızı önler.

KomutAmacıNe zaman kullanılır?
systemctl start servis.serviceServisi şimdi başlatırAçılış ayarını değiştirmeden deneme yapmak için
systemctl enable servis.serviceAçılışta başlatılmasını etkinleştirirKalıcı otomatik başlatma için
systemctl enable --now servis.serviceEtkinleştirir ve hemen başlatırYeni kurulumdan sonra
systemctl disable --now servis.serviceOtomatik başlatmayı kaldırır ve çalışıyorsa durdururServisi devre dışı bırakırken
systemctl restart servis.serviceDurdurup yeniden başlatırBirim dosyası dışındaki ayar değişikliklerinden sonra

Birim dosyasını değiştirdiğinizde önce sudo systemctl daemon-reload, ardından çoğu durumda sudo systemctl restart servis.service çalıştırın. Yalnızca programın ayarını değiştirdiyseniz yeniden yükleme gerekebilir; birim dosyasındaki değişiklikler için daemon-reload gereklidir.

Başlamıyorsa nasıl teşhis edilir?​


Durum çıktısı failed ise ayrıntıyı şu komutlarla inceleyin:

Kod:
systemctl status ornek-servis.service --no-pager
journalctl -u ornek-servis.service -b --no-pager

203/EXEC benzeri bir hata genellikle ExecStart yolunun yanlış, dosyanın çalıştırılamaz veya betiğin yorumlayıcı satırının hatalı olduğunu gösterir. Unit not found görürseniz dosya adını, .service uzantısını ve daemon-reload adımını kontrol edin. Servis hemen kapanıyorsa ExecStart ile çalıştırılan programı aynı kullanıcı ve aynı tam yol ile terminalde ayrıca test edin.

Sistem servisi ile kullanıcı servisi farkı​


/etc/systemd/system/ altındaki birim sistem servisi olarak yönetilir ve genellikle root yetkisi ister. Yalnızca kendi kullanıcı oturumunuz için çalışan bir programı açılışta başlatmak istiyorsanız ~/.config/systemd/user/ altında kullanıcı birimi ve systemctl --user enable --now servis.service kullanılır. Kullanıcı servisi çoğunlukla oturum açılınca çalışır; sistem açılır açılmaz, kullanıcı giriş yapmadan çalışması gerekiyorsa uygun sistem servisi veya kullanıcı yöneticisi için ayrıca yapılandırılan lingering seçeneği değerlendirilir.

Sık sorulan sorular​


Servis dosyasını nereye koymalıyım?​


Kendi oluşturduğunuz sistem servisleri için /etc/systemd/system/ uygundur. Dağıtımın paket yöneticisiyle gelen birim dosyalarını doğrudan değiştirmek yerine gerekirse systemd override yöntemi kullanılmalıdır.

Servis yalnızca ağ hazır olduktan sonra başlamalıysa ne yapmalıyım?​


Birim dosyasının [Unit] bölümünde After=network-online.target sıralamasıyla birlikte Wants=network-online.target kullanılır. Ağın gerçekten hazır olmasını bekleyen servislerde ayrıca dağıtımın ilgili ağ-online hedefinin etkin olması gerekebilir; yalnızca After satırı tek başına ağı kurmaz.

Kullanıcı giriş yapmadan program çalışabilir mi?​


Evet. Programı sistem servisi olarak /etc/systemd/system/ altında tanımlayın ve gerekli çalışma kullanıcısını birimde User= ile belirtin. Programın dosya ve ortam değişkenlerine bu kullanıcının erişebildiğini ayrıca doğrulayın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.