Blog Yazısı

← Tüm Blog Yazılarına Dön
DevOps & Sistem Yönetimi • 12 Kasım 2026 • 7 dk okuma

Yazdığınız Python/Node.js Kodunu Arka Planda 7/24 Çalıştırmak: Linux systemd Servisi Oluşturma Rehberi

Bir bot, API veya Python scripti yazdınız; SSH terminali kapandığında kodun durmasını engellemenin profesyonel yolu: Linux systemd servisi. Otomatik yeniden başlatma (auto-restart), log takibi ve servis yönetimi rehberi.

Harika bir Python Telegram botu, yapay zekâ servisi veya Node.js web sunucusu yazdınız. VPS sunucunuza bağlandınız, python bot.py komutunu verdiniz; her şey tıkır tıkır çalışıyor. Ancak bilgisayarınızı kapatıp SSH terminalinden çıktığınız anda veya internetiniz koptuğunda ne olur? Linux işletim sistemi terminal oturumuna bağlı tüm alt süreçlere bir 'SIGHUP' (Hangup) sinyali gönderir ve kodunuz anında ölür! Birçok geliştirici bu sorunu çözmek için nohup veya screen/tmux gibi geçici yamalar kullanır. Oysa gerçek prodüksiyon ortamlarında kodları arka planda ölümsüz kılmanın tek endüstriyel standardı Linux 'systemd' servisleridir.

systemd Nedir ve Neden nohup veya screen'den Üstündür?:
systemd; modern Linux dağıtımlarında (Ubuntu, Debian, CentOS, AlmaLinux) işletim sistemi çekirdeği (Kernel) yüklendikten sonra çalışan 1 numaralı ana süreçtir (PID 1). Tüm diğer arka plan servislerini (Nginx, MySQL, SSH) o başlatır ve denetler. systemd kullanmanın sağladığı devasa avantajlar şunlardır:
1. Sunucu Yeniden Başlasa Bile Otomatik Açılır: Sunucu elektrik kesintisinden veya güncellemeden sonra yeniden başlarsa kodunuz tek bir tuşa basmadan kendiliğinden çalışır.
2. Çökerse Kendi Kendine Dirilir (Auto-Restart): Kodunuz beklenmedik bir hata alıp kapansa bile systemd saniyeler içinde onu tekrar ayağa kaldırır.
3. Merkezi Loglama: Kodunuzun tüm print veya console.log çıktıları journalctl ile güvenle saklanır; log dosyası taşması yaşanmaz.
4. Güvenlik: Kodunuzu tehlikeli root kullanıcısı yerine sınırlı yetkili özel bir kullanıcıyla çalıştırabilirsiniz.

Adım Adım Kendi Servisinizi Oluşturun (Örnek: BaverBot):
Diyelim ki /var/www/bot/app.py konumunda çalışan bir Python kodunuz var. Bunu 3 adımda gerçek bir Linux servisine dönüştürelim:

1. Servis Dosyasını Oluşturun:
Linux\'ta servisler /etc/systemd/system/ klasöründe .service uzantısıyla tanımlanır:
sudo nano /etc/systemd/system/baverbot.service

2. Servis Yapılandırmasını Yazın:
Dosyanın içine şu temel kuralları ekleyin:

[Unit]
Description=Baver Bot Arka Plan Servisi
After=network.target

[Service]
Type=simple
User=baver
WorkingDirectory=/var/www/bot
ExecStart=/usr/bin/python3 /var/www/bot/app.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Buradaki Restart=always ve RestartSec=5 parametresi sihirli kısımdır: Kodunuz patlasa bile systemd 5 saniye bekleyip onu anında sıfırdan diriltir!

Servisi Ayağa Kaldırma ve Yönetme (systemctl Komutları):
Dosyayı kaydedip kapattıktan sonra terminalden şu 4 komutla servisinizi hayata geçirin:

1. systemd\'yi haberdar edin:
sudo systemctl daemon-reload

2. Sunucu açılışında otomatik başlamasını sağlayın:
sudo systemctl enable baverbot

3. Servisi hemen başlatın:
sudo systemctl start baverbot

4. Canlı durumunu kontrol edin:
sudo systemctl status baverbot
Ekranda yeşil renkte 'active (running)' yazısını gördüğünüz an kodunuz artık Linux\'un koruması altında ölümsüzleşmiştir!

Canlı Logları Takip Etmek (journalctl Gücü):
Kodunuzun ekrana bastığı çıktıları veya olası hataları canlı olarak terminalden izlemek için Linux\'un yerleşik log aracını kullanın:
sudo journalctl -u baverbot -f
-f (follow) parametresi tıpkı canlı bir konsol gibi kodunuzun ürettiği her satırı anlık olarak ekranınıza akıtır.

Sonuç: Geliştiricilikten DevOps Olgunluğuna Geçiş:
Kodunuzu yerel bilgisayarınızda çalıştırmak ile onu bir sunucuda 365 gün kesintisiz ayakta tutmak arasında büyük bir mühendislik farkı vardır. systemd mimarisini öğrenmek; yazdığınız botların, API\'lerin ve arka plan işçilerinin (workers) internet kopsa da, sunucu kapansa da tıkır tıkır çalışmasını garanti eden vazgeçilmez bir DevOps yeteneğidir.

← Diğer Yazılar Fikirlerini Paylaş →