it-swarm-tr.com

Linux'ta otomatik olarak komutu tekrarla

Linux komut satırında her n saniyede bir komutun tekrarlanması mümkün müdür.

Örneğin, çalışan bir ithalatım var ve yapıyorum diyorum.

ls -l

dosya boyutunu kontrol etmek artıyor. Bunun otomatik olarak tekrarlanması emrini vermek istiyorum.

284
Marty Wallace

Her 5 saniyede bir izleyin ...

watch -n 5 ls -l

Değişikliklerin görsel onayını almak istiyorsanız, ls komutundan önce --differences ekleyin.

OSX adam sayfasına göre, ayrıca var

--Kümülatif seçenek, şimdiye kadar değişmiş olan tüm konumların çalışan bir görüntüsünü sunarak "yapışkan" ın vurgulanmasını sağlar. -T veya --no-title seçeneği, ekranın üstündeki aralık, komut ve geçerli saati ve aşağıdaki boş satırı gösteren başlığı kapatır.

Linux/Unix man sayfası bulunabilir burada

514
Rawkode
while true; do
    sleep 5
    ls -l
done
109

"izlemek" Busybox'ta bir saniyenin kesirlerine izin vermiyor, "uyku" ise. Bu senin için önemliyse, şunu dene:

while true; do ls -l; sleep .5; done
88
mikhail

sleep zaten 0 değerini döndürür. Gibi kullanıyorum:

while sleep 3 ; do ls -l ; done

Bu, Mikhail'in çözümünden biraz daha kısa. Küçük bir dezavantajı, ilk kez hedef komutu çalıştırmadan önce uymasıdır.

28
Sebastian Wagner

Komut, borular ve tırnaklar gibi bazı özel karakterler içeriyorsa, komutun tırnaklarla doldurulması gerekir. Örneğin, ls -l | grep "txt" öğesini tekrarlamak için watch komutu şöyle olmalıdır:

watch -n 5 'ls -l | grep "txt"'

18
jonathanzh

Komutları periyodik olarak cron olmadan çalıştırmak while ile yaptığımızda mümkündür.

Komut olarak:

while true ; do command ; sleep 100 ; done &
[ ex: # while true;  do echo `date` ; sleep 2 ; done & ]

Örnek:

while true
do echo "Hello World"
sleep 100
done &

Son & dosyasını unutmayın, çünkü döngünüzü arka planda tutacaktır. Ancak işlem kimliğini "ps -ef | grep your_script" komutuyla bulmanız ve sonra onu öldürmeniz gerekir. Bu yüzden lütfen betiği çalıştırırken '&' işaretini ekleyin.

# ./while_check.sh &

İşte bir script ile aynı döngü. "While_check.sh" dosyasını oluşturun ve içine şunu koyun:

#!/bin/bash
while true; do 
    echo "Hello World" # Substitute this line for whatever command you want.
    sleep 100
done

Ardından bash ./while_check.sh & yazarak çalıştırın

13
Ranjithkumar T

izle iyidir ancak ekranı temizleyecektir.

watch -n 1 'ps aux | grep php'
7
Eduardo

"Sürüklenme" den kaçınmak istiyorsanız, komutun ne kadar sürdüğüne bakılmaksızın (N saniyeden daha az sürdüğünü varsayalım) komutun her N saniyede bir yürütmesini istediğiniz anlamına gelirse, işte bir komutla 5 saniyede bir komutu tekrar edecek ikinci doğruluk (eğer devam edemezse bir uyarı yazdıracaktır):

PERIOD=5

while [ 1 ]
do
    let lastup=`date +%s`
    # do command
    let diff=`date +%s`-$lastup
    if [ "$diff" -lt "$PERIOD" ]
    then
        sleep $(($PERIOD-$diff))
    Elif [ "$diff" -gt "$PERIOD" ]
    then
        echo "Command took longer than iteration period of $PERIOD seconds!"
    fi
done

Uyku sadece bir saniye için doğru olduğu için hala biraz kayması olabilir. Date komutunu yaratıcı bir şekilde kullanarak bu doğruluğu artırabilirsiniz.

6
mcote

Aşağıdakileri çalıştırabilir ve sadece boyutunu filtreleyebilirsiniz. Dosyanız somefilename olarak adlandırılmışsa, aşağıdakileri yapabilirsiniz

while :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done

Birçok fikirden biri.

4
Valentin Bajrami

Belirli bir sayıda belirli bir şey yapmak istiyorsanız, her zaman bunu yapabilirsiniz:

repeat 300 do my first command here && sleep 1.5
4
brightball
watch -n 5 'ls -l 

Her 5 saniyeden sonra Runls -l komutu verilecek

Çıktı :-

Every 5.0s: ls -l                                                                                                      Fri Nov 17 16:28:25 2017

total 169548
-rw-rw-r--  1 sachin sachin     4292 Oct 18 12:16 About_us_Admission.doc
-rw-rw-r--  1 sachin sachin      865 Oct 13 15:26 About_us_At_glance.doc
-rw-rw-r--  1 sachin sachin     1816 Oct 13 16:11 About_us_Principle.doc
-rw-rw-r--  1 sachin sachin     1775 Oct 13 15:59 About_us_Vission_mission.doc
-rw-rw-r--  1 sachin sachin     1970 Oct 13 16:41 Academic_Middle_school.doc
-rw-rw-r--  1 sachin sachin      772 Oct 16 16:07 academics_High_School.doc
-rw-rw-r--  1 sachin sachin      648 Oct 16 13:34 academics_pre_primary.doc
-rw-rw-r--  1 sachin sachin      708 Oct 16 13:39 academics_primary.doc
-rwxrwxr-x  1 sachin sachin     8816 Nov  1 12:10 a.out
-rw-rw-r--  1 sachin sachin    23956 Oct 23 18:14 Ass1.c++
-rw-rw-r--  1 sachin sachin      342 Oct 23 22:13 Ass2.doc
drwxrwxr-x  2 sachin sachin     4096 Oct 19 10:45 Backtracking
drwxrwxr-x  3 sachin sachin     4096 Sep 23 20:09 BeautifulSoup
drwxrwxr-x  2 sachin sachin     4096 Nov  2 00:18 CL_1
drwxrwxr-x  2 sachin sachin     4096 Oct 23 20:16 Code
drwxr-xr-x  2 sachin sachin     4096 Nov 15 12:05 Desktop
-rw-rw-r--  1 sachin sachin        0 Oct 13 23:12 doc
drwxr-xr-x  4 sachin sachin     4096 Nov  6 21:18 Documents
drwxr-xr-x 27 sachin sachin    12288 Nov 17 13:23 Downloads
-rw-r--r--  1 sachin sachin     8980 Sep 19 23:58 examples.desktop
1
HeadAndTail

Kaymayı daha kolay en aza indirmek için aşağıdakileri kullanın:

while :; do sleep 1m & some-command; wait; done

hala döngü yapısını çalıştırmak için zamana ve gerçekte yürütmek için uyku komutuna bağlı olarak zaman zaman küçük bir miktar sapma olacaktır.

ipucu: ':' 0'a doğru yani doğru.

1
math

Komutu, başarısız olana kadar tekrar tekrar çalıştırmak ve tüm çıktıları görmenize izin vermek istiyorsanız özellikle yararlı olan özlü bir çözüm.

while ls -l; do
    sleep 5
done
0
arsdragonfly