`` Watch '' ı arka plan işi olarak nasıl çalıştırabilirim?


Yanıtlar:


26

Amacı, watchbir komutun sonuçlarını tam ekran göstermek ve sürekli olarak güncellemektir; çıktıyı bir dosyaya yönlendiriyor ve arka plana alıyorsanız, ilk etapta watch kullanmanız için hiçbir neden yoktur.

Bir komutu bir gecikme ile tekrar tekrar çalıştırmak istiyorsanız ( watchvarsayılan olarak iki saniye bekler), şöyle bir şey kullanabilirsiniz:

while true; do
    cmd >> output.txt
    sleep 2
done

Bunu engellemeyen bir şekilde yapmanın bir yolu var mı? Örneğin, bu ve diğer komutları tek bir bash betiğine koymak ve bundan sonra gelen kodu çalıştırmaya devam etmek istiyorsam (bunu hala arka planda yaparken)?
Austin

14

İşte bir yol:

watch -n 1 'date' &>/dev/null &

İşlemi arka planı yaptığınızdan, terminal ekranına ihtiyacınız olmadığını ve bir dosyaya iyi yönlendirdiğinizi varsayabiliriz. Bunu yaparsanız sorunsuz bir şekilde arka plan watchyapabilirsiniz.

sleep, Michael Mrozek'in önerdiği gibi, yavaş yavaş gecikir ki bu istenmeyen bir durumdur. Sistem saatini izleyen ve geçen süreye göre bir komut yürüten kıvrımlı bir kabuk betiğinin yanı sıra, watch -phassas zamanlamalar için iyi bir seçenek olabilir.

Hassas zamanlamalar için:

watch -n 1 -p 'date' &>/dev/null &

üzgünüm, bu nasıl çalışıyor? neden sadece &iki kez kullanmak mümkün ?
phil294

İlkinin man bashnasıl &çalıştığını görmek için adresindeki boru hattı bölümünü okuyun . ;)
Mio Rin

11

Motivasyonlarından emin değilim, ama bu yeterli olabilir mi?

while true; do sleep 2; cmd >>output.txt; done &

Aksi takdirde, lütfen neden gerçekten ihtiyacınız olduğunu açıklayın watch.


2

teesenin arkadaşın. Örneğin, geçerli dizindeki dosya sayısını şu şekilde gösterebilir ve her 2 saniyede bir count.txt dosyasına ekleyebilirsiniz:

watch 'find . -maxdepth 1 -printf " " | wc -c | tee --append count.txt'

2

Motivasyonlarınıza bağlıdır:

  • Bir şeyi periyodik olarak çalıştırmak istiyorsunuz. Sonra doğrudan cron kullanabilirsiniz. (Amacınız için 1 dakikalık bir zaman dilimi yeterliyse).

    • Not: Aralık çok kısaysa veya cihaz çok kısıtlanmışsa ve syslog'u crond'dan daha az ileti kaydedecek şekilde yapılandırmazsanız, syslog'unuzu oldukça hızlı bir şekilde dolduracaktır.
  • Bir şeyi tekrar tekrar çalıştırmak istiyorsunuz:

    while sleep 2 ; do
      cmd
    done >& log.txt

    (Bunu bir crontab'dan çalıştırabilirsiniz, ancak bir komut dosyası kullanılması önemle tavsiye edilir).

  • Periyodik olarak bir komut çalıştırmak ve son yürütme çıktısına erişmek istiyorsunuz.

    • Çıkışı bir ramfs'ye yazabilirsiniz (daha önce komut dosyasını değiştirerek):

      while sleep 2 ; do
        cmd >& last_execution.log
      done 

      veya daha iyisi:

      while sleep 2 ; do
        cmd >& last_execution.log.tmp 
        mv last_execution.log.tmp last_execution.log ## atomically
      done 
    • Bir araya getirebilir screenve watch, böylece bir ekranlı sığdığı sürece her zaman en son durumu kontrol edebilirsiniz:

      screen watch -n 3660 ./make-backup.sh


0

Kullanmanız gerekiyorsa watch- Sadece mike dangelo ve l0b0'ın cevaplarını birleştirin

watch -n 1 'cmd | tee -a output.txt' &>/dev/null &

Örneğin

watch -n 1 'date | tee -a output.txt' &>/dev/null &

sonra saniyeler geçiyor

tail -f output.txt

0

Saat ekrana çıkış yapacak şekilde tasarlanmıştır, ancak çıkışı yeniden yönlendirilebilir (hem stdout hem de stderr) sonra arka planda çalışır.

watch 'date >>fa' >/dev/null 2>/dev/null &
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.