Sunucu Yönetimi & Linux

    Arka Plan İşlemleri (nohup, jobs, bg, fg)

    SSH oturumu kapansa bile süren işleri nohup, jobs, bg, fg ve disown ile yönetmenin pratik rehberi.

    12 dk okuma Güncellendi: 10 Temmuz 2026

    Bir sunucuda saatlerce sürecek bir yedek alma işi başlatırsınız, terminaliniz bir anda donar veya evdeki internetiniz kesilir; döndüğünüzde iş yarıda kalmış, veritabanı dökümü bozuk, log dosyası eksiktir. Bu senaryoyu bir kez yaşayan herkes, uzun süren komutları oturuma bağlı çalıştırmanın ne kadar kırılgan olduğunu anlar. SSH oturumunuz kapandığında, o oturumun altında çalışan her süreç varsayılan olarak bir "kapanış" sinyali alır ve genellikle sonlanır. Oysa doğru araçlarla bir işi arka plana atıp, terminalinizi kapatsanız bile çalışmaya devam etmesini sağlayabilirsiniz.

    Bu rehberde Linux'ta iş kontrolünün (job control) temellerini adım adım ele alacağız. Bir komutu & ile arka plana nasıl atacağınızı, çalışan işleri jobs ile nasıl listeleyeceğinizi, bg ve fg ile ön plan ile arka plan arasında nasıl geçiş yapacağınızı, nohup ile oturum kapansa bile sürecin nasıl hayatta kalacağını, çıktının nohup.out dosyasına nasıl düştüğünü ve disown ile bir işi oturumdan tamamen nasıl koparacağınızı göreceğiz. Son olarak tmux ve screen gibi kalıcı oturum araçlarına değinip, hangi işi hangi yöntemle çalıştırmanız gerektiğine dair net bir karar tablosu sunacağız.

    Ön Plan, Arka Plan ve İş Kontrolü Nedir#

    Terminale bir komut yazıp Enter'a bastığınızda o komut "ön planda" (foreground) çalışır: kabuk (shell) size geri dönmez, siz o iş bitene kadar başka bir şey yazamazsınız. Uzun süren bir işlem söz konusuysa bu, terminalinizin tamamen kilitlenmesi anlamına gelir. İşte tam bu noktada iş kontrolü devreye girer. Modern kabuklar (bash, zsh gibi) her komutu bir "iş" (job) olarak takip eder ve bu işleri ön plandan arka plana taşıma, durdurma ve devam ettirme imkânı sunar.

    Arka planda (background) çalışan bir iş, kabuğun kontrolünü size geri verir. Yani iş çalışmaya devam ederken siz aynı terminalde başka komutlar yazabilirsiniz. Ancak burada kritik bir ayrım var: bir iş "arka planda çalışıyor" olması, "oturuma bağımlılıktan kurtulmuş" olması anlamına gelmez. Arka plandaki iş hâlâ o oturumun çocuğudur; siz çıkış yaptığınızda ya da SSH bağlantınız koptuğunda, kabuk bu işe SIGHUP (hang up, yani "hat kapandı") sinyali gönderir ve iş çoğu zaman sonlanır. Oturumdan gerçekten koparmak için nohup veya disown gibi araçlara ihtiyacımız olacak.

    Bu kavramları netleştirmek, ilerideki komutların neden gerektiğini anlamak için şarttır. Temel kabuk kullanımını tazelemek isterseniz Linux temel komutlar rehberimiz iyi bir başlangıç noktasıdır.

    & ile Bir Komutu Arka Plana Atmak#

    Bir komutu doğrudan arka planda başlatmanın en basit yolu, komutun sonuna & işareti eklemektir. Kabuk komutu başlatır, ona bir "iş numarası" ve süreç kimliği (PID) atar ve hemen size geri döner.

    # Uzun süren bir yedek işini arka planda başlat
    tar -czf /yedek/site-$(date +%F).tar.gz /var/www/html &
    

    Bu komutu çalıştırdığınızda kabuk şuna benzer bir çıktı verir:

    [1] 24187
    

    Buradaki [1] işin numarasıdır (job ID), 24187 ise sürecin işletim sistemi genelindeki PID'idir. İş numarası o oturuma özeldir ve kısa; PID ise tüm sistemde benzersizdir. Artık terminaliniz serbesttir, başka komutlar yazabilirsiniz.

    Zaten ön planda çalışan ve unuttuğunuz bir işi de arka plana alabilirsiniz. Çalışan komutun üzerindeyken Ctrl+Z tuşlarına basarsanız, iş "durdurulur" (stopped) ve kabuk size geri döner:

    [1]+  Stopped                 rsync -av /veri/ /yedek/
    

    Dikkat: Ctrl+Z işi arka plana almaz, sadece duraklatır. İşin arka planda çalışmaya devam etmesi için bir sonraki bölümdeki bg komutunu kullanmanız gerekir. Bu ince ayrımı gözden kaçırmak, "işi arka plana attım ama ilerlemiyor" şikâyetinin en yaygın sebebidir.

    jobs, bg ve fg ile İş Kontrolü#

    Arka plana veya duraklatılmış hâle aldığınız işleri yönetmek için üç temel komut vardır: jobs, bg ve fg.

    jobs komutu, mevcut kabuk oturumundaki tüm işleri listeler:

    jobs -l
    

    Örnek çıktı:

    [1]-  24187 Running    tar -czf /yedek/site.tar.gz /var/www/html &
    [2]+  24193 Stopped    rsync -av /veri/ /yedek/
    

    Buradaki + işareti "varsayılan iş"i, - ise bir sonraki varsayılanı gösterir. bg veya fg komutunu numara belirtmeden çalıştırırsanız, + işaretli iş üzerinde işlem yapılır.

    bg (background), duraklatılmış bir işi arka planda çalışmaya devam ettirir. Az önce Ctrl+Z ile durdurduğumuz 2 numaralı işi çalıştıralım:

    bg %2
    

    fg (foreground), arka plandaki veya duraklatılmış bir işi ön plana geri getirir. İşin ilerleyişini izlemek veya iptal etmek (Ctrl+C) için kullanışlıdır:

    fg %1
    

    İş numaralarına başvururken % öneki kullanılır: %1 birinci işi, %rsync adı "rsync" ile başlayan işi, %+ varsayılan işi ifade eder. Aşağıdaki tablo bu iş kontrolü komutlarını özetliyor:

    Komut / TuşNe Yapar
    komut &Komutu doğrudan arka planda başlatır
    Ctrl+ZÖn plandaki işi duraklatır (stopped)
    jobsOturumdaki işleri listeler
    bg %nDuraklatılmış n numaralı işi arka planda sürdürür
    fg %nn numaralı işi ön plana geri getirir
    kill %nn numaralı işi sonlandırır

    Bu komutlar birlikte, tek bir terminalde birden çok işi rahatça yönetmenizi sağlar. Ancak hepsinin ortak zayıflığı hâlâ geçerli: oturum kapandığında bu işler tehlikeye girer. Şimdi bu sorunu çözelim.

    nohup ile Oturum Kapansa da Süreci Yaşatmak#

    nohup (no hang up), adından da anlaşılacağı gibi, bir süreci SIGHUP sinyalinden korur. Yani oturumunuz kapansa, SSH bağlantınız kopsa bile süreç çalışmaya devam eder. Bir komutu nohup ile başlatmak için komutun başına yazmanız yeterlidir:

    nohup ./uzun-islem.sh &
    

    Bu komutu çalıştırdığınızda kabuk genellikle şu bilgi mesajını verir:

    nohup: ignoring input and appending output to 'nohup.out'
    

    Buradaki iki davranış önemli. Birincisi, nohup sürecin standart girdisini (stdin) kapatır; süreç artık klavyeden veri okuyamaz, çünkü siz gittiğinizde girdiyi sağlayacak kimse olmayacaktır. İkincisi, sürecin ekrana basacağı tüm çıktıyı nohup.out adlı bir dosyaya yönlendirir. Böylece siz olmasanız bile çıktı kaybolmaz, dosyaya birikir.

    nohup özellikle şu tür işler için idealdir: büyük veritabanı dökümleri, terabaytlık dosya transferleri, uzun süren derleme (build) işlemleri, toplu görüntü/video işleme ve saatler süren veri taşıma görevleri. Bir sunucudan diğerine site taşıma yaparken ya da gecelik yedekleme işleri planlarken bu araç sizi olası kesinti kayıplarından kurtarır.

    Bir örnek verelim. Uzak bir sunucuya büyük bir dizini rsync ile senkronize ederken bağlantı kopması riskini ortadan kaldıralım:

    nohup rsync -avz --progress /var/www/ user@hedef-sunucu:/var/www/ &
    echo $! > /tmp/rsync.pid   # PID'i sakla ki sonra takip edebilelim
    

    Buradaki $! özel değişkeni, en son arka plana atılan sürecin PID'ini tutar. Bunu bir dosyaya kaydetmek, ileride sürecin durumunu ps -p $(cat /tmp/rsync.pid) ile kontrol etmenizi kolaylaştırır.

    nohup.out ve Çıktı Yönlendirme#

    nohup çıktıyı otomatik olarak nohup.out dosyasına yazar, ama bu davranış her zaman istediğiniz gibi değildir. Bulunduğunuz dizine yazma izniniz yoksa, nohup çıktıyı $HOME/nohup.out konumuna düşürmeye çalışır. Ayrıca birden fazla nohup işi aynı dizinden başlatılırsa hepsi aynı nohup.out dosyasına karışarak yazar ve logları ayırt etmek imkânsızlaşır. Bu yüzden çıktıyı elle, anlamlı isimli dosyalara yönlendirmek profesyonel yaklaşımdır.

    Standart çıktı (stdout, 1) ve hata çıktısını (stderr, 2) ayrı ya da birleşik yönlendirebilirsiniz:

    # Normal çıktı ve hataları ayrı loglara yaz
    nohup ./islem.sh > /var/log/islem.log 2> /var/log/islem-hata.log &
    
    # Her ikisini tek dosyada birleştir (en yaygın kullanım)
    nohup ./islem.sh > /var/log/islem.log 2>&1 &
    
    # Çıktıyı hiç istemiyorsan çöpe yönlendir
    nohup ./islem.sh > /dev/null 2>&1 &
    

    Buradaki 2>&1 ifadesi "hata çıktısını, standart çıktının gittiği yere yönlendir" demektir ve sıralaması önemlidir; > dosya 2>&1 yazmalısınız, tersi çalışmaz. İşiniz çalışırken ilerlemeyi canlı izlemek isterseniz, log dosyasını başka bir terminalden takip edebilirsiniz:

    tail -f /var/log/islem.log
    

    Uzun süren işlerde log dosyasının şişmesini istemiyorsanız, betiğinizin içinde zaman damgalı ve seviyeli (info, error) loglama yapmanız, sonrasında logrotate ile dosyaları döndürmeniz işletim açısından çok daha temiz bir düzen kurar. Log yönetimi ve dosya işlemleri konusunda pratiklerinizi tazelemek için yine Linux temel komutlar rehberine göz atabilirsiniz.

    disown ile Süreci Oturumdan Koparmak#

    Diyelim ki bir komutu nohup kullanmadan, sadece & ile arka plana attınız ve iş saatler sürecek. Sonra fark ettiniz ki oturumu kapatmanız gerekiyor ama işi kaybetmek istemiyorsunuz. Süreci en baştan nohup ile başlatmadıysanız bile, iş çalışırken onu mevcut kabuğun iş listesinden çıkarıp SIGHUP'tan korumak mümkün. İşte disown tam da bunun için var.

    disown, bir işi kabuğun "iş tablosundan" siler. Böylece kabuk oturumu kapandığında o işe SIGHUP göndermez ve iş çalışmaya devam eder. Kullanımı şöyledir:

    # Uzun işi başlat
    ./buyuk-islem.sh &
    
    # Çalışan işleri gör, iş numarasını öğren
    jobs
    # [1]+  Running    ./buyuk-islem.sh &
    
    # İşi oturumdan kopar
    disown %1
    

    disown -h %1 gibi -h bayrağını kullanırsanız, iş listeden silinmez ama yalnızca SIGHUP gönderilmesi engellenir; iş oturumla listelenmeye devam eder ama çıkışta ölmez. Tüm işleri birden koparmak için disown -a, sadece çalışanları koparmak için disown -r kullanılır.

    nohup ile disown arasındaki fark sık karıştırılır. nohup bir önlemdir: süreci daha başlatırken korur ve çıktıyı bir dosyaya alır. disown ise bir kurtarma aracıdır: zaten çalışan bir işi sonradan korumaya alır. Aralarındaki en önemli ayrım şudur: disown çıktıyı otomatik olarak bir dosyaya yönlendirmez; iş hâlâ orijinal terminale yazmaya çalışıyorsa, terminal kapandığında yeni çıktılar kaybolabilir. Bu yüzden mümkünse işi en baştan nohup ve açık çıktı yönlendirmesiyle başlatmak her zaman daha güvenlidir.

    Özelliknohupdisown
    Ne zaman uygulanırİşi başlatırkenİş zaten çalışırken
    SIGHUP korumasıEvetEvet
    Çıktıyı dosyaya alırEvet (nohup.out)Hayır (elle yönlendirmeliydiniz)
    Girdiyi kapatırEvetHayır
    Tipik kullanımPlanlı uzun işler"Eyvah, çıkmam gerek" anları

    tmux ve screen ile Kalıcı Oturum Alternatifi#

    nohup ve disown, tek seferlik uzun komutlar için harikadır. Ancak işiniz sadece "çalışmaya devam etsin" değil, aynı zamanda "ben geri döndüğümde ekranı, çıktıyı ve etkileşimi olduğu gibi bulayım" ise, terminal çoklayıcılar (terminal multiplexer) devreye girer. tmux ve daha eski kardeşi screen, oturumdan bağımsız yaşayan sanal terminal oturumları oluşturur. Bağlantınız kopsa bile oturum sunucuda çalışmaya devam eder; siz tekrar bağlanıp oturuma "yeniden iliştiğinizde" (attach) her şeyi bıraktığınız yerde bulursunuz.

    Temel bir tmux akışı şöyle işler:

    # Yeni bir isimlendirilmiş oturum başlat
    tmux new -s tasima
    
    # ... içeride uzun işinizi çalıştırın, örn. bir kurulum sihirbazı ...
    
    # Oturumdan ayrıl (iş çalışmaya devam eder): Ctrl+b ardından d
    
    # Daha sonra, hatta başka bir bilgisayardan tekrar bağlan
    tmux attach -t tasima
    
    # Açık oturumları listele
    tmux ls
    

    tmux özellikle etkileşimli uzun işler için tercih edilir: bir kurulum betiğinin sorularını yanıtlarken, bir veritabanı taşımasını canlı izlerken ya da uzun bir apt upgrade sırasında oturumu güvence altına almak isterken. nohup etkileşim gerektirmeyen "başlat ve unut" işleri için, tmux/screen ise izlemek ve müdahale etmek isteyeceğiniz işler için idealdir. Sunucu yönetiminde profesyonel bir alışkanlık, uzaktaki sunucuya bağlanır bağlanmaz doğrudan bir tmux oturumu açıp tüm işi orada yürütmektir; böylece her komut zaten koptan korunmuş olur.

    Kendi sunucunuzu yönetiyor ve bu tür oturum araçlarını rahatça kullanmak istiyorsanız, tam kök erişimi sunan bir VDS sunucu veya sanal sunucu size esneklik sağlar. İşletimi bize bırakmak isterseniz sunucu yönetimi hizmetimiz devreye girer.

    Kalıcı Servisler İçin Doğru Yöntem systemd#

    Şimdi kritik bir uyarı. nohup, disown, tmux gibi araçlar tek seferlik ya da geçici uzun işler için tasarlanmıştır. Bir yedek betiğini bir gece çalıştırmak, büyük bir dosyayı taşımak, tek seferlik bir veri işleme görevini yürütmek için mükemmeldirler. Ancak kalıcı olarak, 7/24 çalışması gereken bir uygulama sunucusunu, bir arka plan işçisini (worker), bir kuyruk tüketicisini ya da özel bir web servisini bu araçlarla ayağa kaldırmak ciddi bir yanlıştır.

    Nedeni basit: nohup ./uygulama & şeklinde başlatılan bir süreç çökerse kimse onu yeniden başlatmaz, sunucu yeniden başlatıldığında (reboot) kaybolur, ne bir kaynak sınırı ne bir bağımlılık yönetimi ne de düzgün loglama sunar. Kalıcı arka plan servisleri için doğru araç, Linux'un servis yöneticisi olan systemd'dir. Bir systemd servisi çöktüğünde otomatik yeniden başlar, sunucu açılışında kendini kaldırır ve loglarını journalctl üzerinden merkezi olarak sunar.

    # /etc/systemd/system/benim-worker.service
    [Unit]
    Description=Benim arka plan isim
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/node /var/www/app/worker.js
    Restart=always
    RestartSec=5
    User=www-data
    WorkingDirectory=/var/www/app
    
    [Install]
    WantedBy=multi-user.target
    
    sudo systemctl daemon-reload
    sudo systemctl enable --now benim-worker.service
    sudo systemctl status benim-worker.service
    

    Özetle basit kural şudur: iş "bir kez çalışıp bitecekse" nohup veya tmux, "sürekli ayakta kalacaksa" systemd. Kalıcı servislerin nasıl yazıldığını, yeniden başlatma politikalarını ve loglama detaylarını systemd servis yönetimi rehberimizde adım adım ele alıyoruz. Kendi uygulamalarınızı hazır şablonlarla ayağa kaldırmak isterseniz App Center üzerinden n8n, Ghost ve benzeri servisleri tek tıkla kurabilirsiniz.

    Sıkça Sorulan Sorular#

    nohup ile disown arasındaki fark nedir#

    Temel fark zamanlamadır ve çıktı yönetimidir. nohup bir komutu başlatırken kullanılır, süreci SIGHUP sinyalinden korur ve çıktısını otomatik olarak nohup.out dosyasına yönlendirir. disown ise zaten & ile arka plana atılmış ve çalışmakta olan bir işi sonradan kabuğun iş listesinden çıkararak korumaya alır, ancak çıktıyı otomatik bir dosyaya yönlendirmez. Uzun bir işi baştan planlıyorsanız nohup tercih edin; "işi başlattım ama şimdi çıkmam gerekti" durumunda disown imdadınıza yetişir.

    SSH bağlantım koparsa arka plandaki işim durur mu#

    Sadece & ile arka plana atılmış bir iş, oturum kapandığında SIGHUP sinyali alır ve büyük olasılıkla sonlanır. İşin bağlantı kopmasından etkilenmemesi için ya en baştan nohup ile başlatmanız, ya çalışırken disown ile oturumdan koparmanız, ya da işi bir tmux/screen oturumu içinde çalıştırmanız gerekir. Bu araçlardan birini kullanmadıysanız, SSH koptuğunda işin durmasını normal karşılamalısınız.

    nohup.out dosyası nerede oluşur ve nasıl değiştiririm#

    Varsayılan olarak nohup, çıktıyı komutu çalıştırdığınız dizindeki nohup.out dosyasına yazar; bu dizine yazma izniniz yoksa çıktı ev dizininizdeki ($HOME/nohup.out) dosyaya düşer. Bu davranışı istemiyorsanız çıktıyı elle yönlendirin. Örneğin nohup ./islem.sh > /var/log/islem.log 2>&1 & komutu hem standart çıktıyı hem de hataları belirlediğiniz dosyaya yazar ve nohup.out hiç oluşmaz. Böylece birden fazla işin logu birbirine karışmaz.

    Bir işi durdurdum Ctrl Z fakat neden ilerlemiyor#

    Ctrl+Z bir işi arka plana almaz, onu yalnızca duraklatır (stopped). Duraklatılan bir iş çalışmaya devam etmez, adeta beklemeye alınır. İşin arka planda çalışmaya devam etmesini istiyorsanız bg komutunu kullanmalısınız; örneğin jobs ile numarayı öğrenip bg %1 yazmanız işi arka planda sürdürür. İşi tekrar ön plana getirmek isterseniz fg %1 komutu bunu sağlar.

    Kalıcı çalışması gereken bir uygulamayı nohup ile başlatabilir miyim#

    Teknik olarak başlatabilirsiniz ama bu yanlış bir yaklaşımdır ve üretim ortamında önerilmez. nohup ile başlatılan bir uygulama çökerse kendini yeniden başlatmaz, sunucu yeniden başlatıldığında kaybolur ve düzgün loglama ile kaynak yönetiminden yoksundur. Sürekli ayakta kalması gereken servisler için doğru araç systemd'dir; otomatik yeniden başlatma, açılışta devreye girme ve merkezi loglama sunar. Detaylar için systemd servis yönetimi rehberimize göz atabilirsiniz.

    Çalışan bir arka plan işini nasıl bulur ve sonlandırırım#

    Aynı oturumdaysanız jobs -l komutu işleri numarasıyla ve PID'iyle listeler; kill %1 ile iş numarasına göre, kill 24187 ile de PID'e göre sonlandırabilirsiniz. Oturumu kapattıysanız ve nohup ile başlatılmış bir işi arıyorsanız, ps aux | grep islem-adi ya da pgrep -af islem-adi komutları süreci ve PID'ini bulmanıza yardımcı olur. Süreç yanıt vermiyorsa önce nazikçe kill PID, işe yaramazsa son çare olarak kill -9 PID kullanabilirsiniz.

    Kapanış#

    Arka plan işlemleri, sunucu yönetiminin görünmez ama vazgeçilmez bir parçasıdır. & ile işleri arka plana atmak, jobs, bg ve fg ile aralarında gezinmek, nohup ve disown ile oturumdan bağımsız hale getirmek, gerektiğinde tmux ile kalıcı oturumlar kurmak; bu araçların hepsi bir araya geldiğinde, kesintiler karşısında dayanıklı bir çalışma disiplini oluşturursunuz. Altın kural nettir: kısa ve tek seferlik işler için nohup veya tmux, sürekli çalışması gereken servisler için ise systemd.

    Bu teknikleri rahatça uygulayabileceğiniz, tam kök erişimli ve kararlı bir altyapıya ihtiyacınız varsa Clou.TR yanınızda. Yüksek performanslı VDS sunucu ve sanal sunucu çözümlerimizle sunucunuz üzerinde tam kontrol sizde olur; işletim yükünü üstlenmemizi isterseniz sunucu yönetimi hizmetimiz devreye girer. Web projeleriniz için hosting paketlerimizi inceleyebilir, güvenli ve otomatik yedekleme çözümlerimizle verilerinizi güvence altına alabilirsiniz. Doğru araçlarla çalışan bir sunucu, arkanıza yaslanıp işinize odaklanmanızı sağlar.

    nohupSüreçLinux

    Uygulamaya geçmeye hazır mısınız?

    NVMe SSD, ücretsiz SSL ve %99.9 uptime garantisiyle Clou.TR hosting ve sunucu çözümleriyle projenizi hayata geçirin.