Pardus Terminalini Özgür Bırakın: Siz Başka İşle Uğraşırken O Çalışsın
Normalde terminali (pencereyi) kapattığınızda, o terminalin başlattığı tüm çocuk süreçler de ölür. Çünkü terminal kapanırken kendine bağlı herkese "SIGHUP" (Signal Hang Up - Telefonu Kapat) sinyali gönderir.
İşte uzun süren bir indirme işleminin veya yedeklemenin yarıda kalmamasını sağlayan iki kahramanımız: & (Ampersand) ve nohup.
1. Arka Plana Atmak: & (Ampersand) İşareti
Bir komutu yazıp sonuna & işareti koyarsanız, Pardus o komutu çalıştırır ama terminalin kontrolünü hemen size geri verir.
Örnek:
Diyelim ki masaüstünde gedit (Not Defteri) açacaksınız ama terminali bloke etmek istemiyorsunuz.
gedit &
Ne olur? Not defteri açılır, ancak terminalde hemen yeni bir satır (prompt) belirir. Başka komutlar yazmaya devam edebilirsiniz.
Kritik Nokta: Bu yöntem süreci arka plana atar ama terminale bağlı kalmaya devam eder. Eğer terminal pencresini kapatırsanız, not defteri de (genellikle) kapanır.
2. Ölümsüzlük İksiri: nohup
Eğer terminali kapatsanız bile işlemin çalışmaya devam etmesini istiyorsanız, nohup (No Hang Up - Kapanma Sinyalini Yoksay) komutunu kullanmalısınız.
nohup, süreci terminalin gönderdiği o ölümcül "kapan" sinyalinden koruyan bir kalkandır.
Kullanımı (Genellikle & ile birlikte kullanılır):
nohup uzun_suren_islem &
Senaryo: Uzun Bir Dosya İndirme
Diyelim ki internetten çok büyük bir dosya (Linux ISO dosyası) indireceksiniz ve bu saatler sürecek. Terminali açık beklemek istemiyorsunuz.
Adım 1: Komutu Hazırlayın
wget indirme komutunu nohup ile başlatın.
nohup wget https://ornek.com/cok-buyuk-dosya.iso &
Adım 2: Çıktı Mesajı
Terminal size şöyle bir mesaj verecektir:
nohup: ignoring input and appending output to 'nohup.out'
Adım 3: Terminali Kapatın
Artık terminal pencresini gönül rahatlığıyla kapatabilirsiniz (exit yazarak veya çarpıya basarak). İndirme işlemi sunucuda sessizce devam eder.
Sık Sorulan Soru: "Ekranda Göreceğim Yazılar Nereye Gitti?"
Normalde terminal ekranına akan yazılar (indirme yüzdesi, hatalar vb.), terminal kapandığı için kaybolmaz. nohup, bu çıktıları otomatik olarak o an bulunduğunuz klasörde nohup.out isimli bir metin dosyasına yazar.
İşlemin durumunu kontrol etmek isterseniz bu dosyayı okuyabilirsiniz:
# Dosyanın son 10 satırını canlı takip etmek için:
tail -f nohup.out
(Takibi bırakmak için Ctrl + C tuşlarına basın. Bu işlem indirmeyi durdurmaz, sadece dosya okumayı durdurur.)
Özet Tablo
| Komut | Ne Yapar? | Terminal Kapanırsa? |
komut | Ön planda çalışır. Terminali kilitler. | İşlem durur (Ölür). |
komut & | Arka planda çalışır. Terminali kullanabilirsiniz. | İşlem genellikle durur. |
nohup komut & | Hem arka planda çalışır hem de terminalden bağımsızlaşır. | İşlem çalışmaya devam eder. |
Şu ana kadar komutları hep siz elle yazdınız. Peki, siz uyurken veya tatildeyken bilgisayarınızın kendi kendine bakım yapmasını, yedek almasını veya güncelleme kontrolü yapmasını nasıl sağlarsınız?
Karşınızda Linux dünyasının zaman efendisi: Cron.
Zamanın Efendisi: Cron ve Crontab
Cron, Linux sistemlerinde belirli komutların veya scriptlerin (betiklerin) belirlenen zamanlarda otomatik olarak çalıştırılmasını sağlayan bir servistir. Bunu telefonunuzdaki "Alarm" uygulaması gibi düşünebilirsiniz, ancak çok daha yeteneklisidir.
1. Kavramlar: Cron vs Crontab
Cron: Arka planda sessizce çalışan ve "Vakit geldi mi?" diye saati kontrol eden servisin (daemon) adıdır.
Crontab (Cron Table): Hangi işlemin ne zaman yapılacağının yazıldığı listeyi (dosyayı) ve bu listeyi düzenleyen komutu ifade eder.
2. Crontab Dosyasını Açmak
Görev eklemek için özel bir komut kullanırız. Terminale şunu yazın:
crontab -e
( -e parametresi Edit (Düzenle) anlamına gelir.)
İlk kez çalıştırıyorsanız: Pardus size "Hangi editörü kullanmak istersiniz?" diye sorabilir. Başlangıç için Nano (genellikle 1 numara) en kolay seçenektir.
3. Sihirli Formül: 5 Yıldız Kuralı (* * * * *)
Crontab dosyası açıldığında en alta inip komutlarımızı yazarız. Ancak buradaki söz dizimi (syntax) çok önemlidir. Her satır 5 zaman dilimi ve 1 komuttan oluşur.
Yapı şöyledir:
Dakika Saat Ayın_Günü Ay Haftanın_Günü Komut
| Simge | Anlamı | Değer Aralığı |
1. * | Dakika | 0 - 59 |
2. * | Saat | 0 - 23 |
3. * | Ayın Günü | 1 - 31 |
4. * | Ay | 1 - 12 |
5. * | Haftanın Günü | 0 - 6 (0=Pazar, 1=Pzt...) |
4. Örnek Senaryolar
Aşağıdaki satırları crontab -e ile açtığınız dosyanın en altına eklerseniz ne olur?
Örnek 1: Her Gece 03:30'da Yedek Al
Bilgisayarın en sakin olduğu saatte yedek.sh dosyasını çalıştırır.
30 03 * * * /home/kullanici/scripts/yedek.sh
Örnek 2: Hafta İçi Her Sabah 08:00'de Günaydın De
Sadece Pazartesi'den Cuma'ya (1-5) çalışır.
00 08 * * 1-5 echo "Günaydın Pardus!" >> /tmp/gunluk.txt
Örnek 3: Her 15 Dakikada Bir Çalış
/ işareti "her" anlamı katar.
*/15 * * * * /usr/bin/python3 /home/kullanici/bot.py
Örnek 4: Bilgisayar Açıldığında Çalış (@reboot)
Zaman hesabı yapmadan, sistem her yeniden başladığında bir kez çalışır.
@reboot /home/kullanici/baslangic_ayarlari.sh
5. Komutlarınızı Yönetmek
Oluşturduğunuz görevleri görmek veya silmek için şu komutları kullanabilirsiniz:
Listelemek için:
Ben hangi görevleri eklemiştim?
Bash:crontab -lSilmek için (DİKKAT!):
Tüm crontab dosyasını (bütün görevleri) siler. Geri dönüşü yoktur.
Bash:crontab -r(Tek bir görevi silmek için
crontab -eile girip ilgili satırı silmeniz daha güvenlidir.)
6. Uzman İpucu: Çıktıları Yönetmek
Cron sessiz çalışır. Eğer komutunuz bir hata verirse bunu ekranda göremezsiniz. Bu yüzden çıktıları bir "Log" (Kayıt) dosyasına yönlendirmek hayati önem taşır.
Örnek:
* * * * * /home/script.sh >> /home/loglarim.txt 2>&1
>>: Çıktıyı dosyanın sonuna ekler (Dosyayı silmez).2>&1: Hataları da standart çıktı ile aynı dosyaya yazar. Böylece hem başarıyı hem hatayı görürsünüz.
Özet:
Cron, Pardus'un görünmez asistanıdır. Ona bir kez emir verirsiniz (örneğin: "Her ayın 1'inde disk temizliği yap") ve o bunu sonsuza kadar aksatmadan yerine getirir.
Yorumlar