Bir robot, sensör platformu, hava istasyonu inşa ediyorsanız, terminalden bağlantıyı kestiğinizde kodun çalışmasının durmasını istemezsiniz ve nohup tam size göre. Bu nasıl yapılır bölümünde, nasıl kullanılacağını öğreneceğiz. nohup bir dizi örnek aracılığıyla
Bir komutu çalıştırmak ve bir terminal penceresini / SSH oturumunu kapattıktan sonra bile çalışır durumda bırakmak istediğiniz zamanlar vardır. En basit yol kullanmaktır nohup terminali kapattıktan çok sonra herhangi bir komut veya yürütülebilir komut dosyası çalıştıracak (takılma yok).
Linux’ta Temel Nohup Kullanımı
En temel haliyle, nohup sadece tek bir argüman ile kullanılabilir, çalıştırmak istediğimiz betiğin/komutun adı. Örneğin, adında bir Bash betiğimiz olsaydı test.sh olarak çalıştırabiliriz.
nohup ./test.sh
Komut dosyası / komutu standart çıktı üretiyorsa, bu çıktı şuraya yazılır: nohup.out ve terminal değil. Çıktıyı kontrol etmek için kullanabiliriz kuyruk dosyada yapılan güncellemeleri takip etmek için.
tail -f nohup.out
Nohup Kullanımına Bir Örnek
Her saniye ekrana bir mesaj yazdıran ve değişkende depolanan değeri güncelleyen basit bir Bash betiği oluşturduk. n. İşte o dosyanın test.sh adlı kodu.
#!/bin/bash
n=0
while true
do
echo "I keep counting"
echo $n
n=$((n+1))
sleep 1
done
1. Bir metin düzenleyici açın ve örnek kodu yapıştırın.
2. Dosyayı ana dizininize test.sh olarak kaydedin.
3. Bir terminal açın ve test.sh dosyasını çalıştırılabilir olarak ayarlayın.
chmod +x test.sh
4. Komutu çalıştırarak test.sh’nin yürütülebilir olup olmadığını test edin. Başarılı olursa, durdurmak için CTRL + C tuşlarına basın.
5. nohup kullanın ve test.sh’yi argüman olarak kullanın. Sisteme betiği nerede bulacağını söylemek için ./test.sh kullanmamız gerektiğini unutmayın. Terminaldeki tek çıktı “ nohup: girdiyi yok sayma ve çıktıyı ‘nohup.out’a ekleme” şeklindedir.
nohup ./test.sh
6. Başka bir terminal açın ve nohup.out dosyasında yapılan güncellemeleri takip etmek için tail komutunu kullanın. Ekranda “Saymaya devam ediyorum” ifadesini ve yukarı doğru sayan bir sayıyı görmelisiniz.
tail -f nohup.out
7. Nohup çalışan terminali kapatın. Kapatmayı onaylamanız istenirse Evet’i seçin. tail -f çalıştıran terminal, nohup’ın hala betiği çalıştırdığını göstererek çalışmaya devam edecektir. Bunu, htop’u çalıştırarak ve test.sh dosyasını arayarak onayladık.
Nohup Çıktısını Yönlendirme
Nohup’un bir sınırlaması var. Varsayılan olarak yazar nohup.outyani iki nohup örneğimiz olsaydı, ikisi de aynı dosyaya yazardı.
Bunu aşmak için çıktıyı başka bir dosyaya göndermek için yeniden yönlendirmeyi kullanabiliriz. hadi kullanalım nohup ile birlikte ping atmak Google’ın DNS sunucularından birine ping gönderme komutu verin ve çıktıyı GooglePing.txt dosyasına kaydedin.
1. Bir terminal penceresi açın.
2. nohup komutunu kullanarak, argüman olarak ping 8.8.8.8 kullanın. Bu, her saniye Google’ın DNS sunucularından birine ping gönderecek, kullanışlı bir bağlantı testi.
nohup ping 8.8.8.8 > GooglePing.txt
3. Başka bir terminal açın ve GooglePing.txt çıktısını takip etmek için tail’i kullanın. Çıktıyı takip etmeyi durdurmaya hazır olduğunuzda CTRL+C tuşlarına basın.
nohup ping 8.8.8.8 > GooglePing.txt
4. Nohup terminalinde, ping komutunu durdurmak için CTRL+C tuşlarına basın.
Arka planda bir Nohup komutu çalıştırma
Ne zaman nohup çalıştırır, terminalin kontrolünü ele geçirir ve etkin bir şekilde devre dışı bırakır. Ama biraz daha Linux büyüsü ile komutu arka plana koyabiliriz. Komutu arka plana yerleştirerek terminali kullanmaya devam edebiliriz.
Göstermek için ping örneğini yeniden kullanacağız.
1. Bir terminal penceresi açın.
2. nohup komutunu kullanarak, argüman olarak ping 8.8.8.8’i kullanın ve ardından komutu arka plana göndermek için & ekleyin. Bu komutu çalıştırmanın çıktısının bir işlem kimliği (PID) olacağını unutmayın. Buna daha sonra ihtiyacımız olacak.
nohup ping 8.8.8.8 > GooglePing.txt &
3. Başka bir terminal açın ve GooglePing.txt çıktısını takip etmek için tail’i kullanın.
4. İsteme geri dönmek için nohup terminalinde Enter tuşuna basın. nohup komutu, kontrolü bize geri verir, ancak bilgi istemi mevcut değildir. Enter tuşuna basarak doğru terminal istemini görebiliriz.
5. Arka plan işlemini sonlandırmak için işlem kimliğiyle birlikte kill komutunu kullanın. İşlem artık gerekli değilse, kaynakları korumak için onu öldürmek en iyi uygulamadır. Bu örneği çalışmaya bırakırsak, bilgisayar kapatılana kadar sürekli olarak Google’ın DNS sunucusuna ping atacaktı.
kill 28365