เป็นไปได้ในบรรทัดคำสั่ง Linux ที่มีคำสั่งทำซ้ำทุก ๆnวินาทีหรือไม่?
พูดว่าฉันใช้การนำเข้าแล้วและกำลังทำอยู่
ls -l
เพื่อตรวจสอบว่าขนาดไฟล์เพิ่มขึ้นหรือไม่ ฉันต้องการมีคำสั่งให้ทำซ้ำนี้โดยอัตโนมัติ
เป็นไปได้ในบรรทัดคำสั่ง Linux ที่มีคำสั่งทำซ้ำทุก ๆnวินาทีหรือไม่?
พูดว่าฉันใช้การนำเข้าแล้วและกำลังทำอยู่
ls -l
เพื่อตรวจสอบว่าขนาดไฟล์เพิ่มขึ้นหรือไม่ ฉันต้องการมีคำสั่งให้ทำซ้ำนี้โดยอัตโนมัติ
คำตอบ:
ดูทุก 5 วินาที ...
watch -n 5 ls -l
หากคุณต้องการให้มีการยืนยันการเปลี่ยนแปลงด้วยภาพให้ผนวก--differences
ก่อนls
คำสั่ง
ตามหน้า man OSX ยังมี
ตัวเลือก - การสะสมทำให้การเน้น "เหนียว" นำเสนอการแสดงผลการทำงานของทุกตำแหน่งที่เคยมีการเปลี่ยนแปลง อ็อพชัน -t or - no-title ปิดส่วนหัวที่แสดงช่วงเวลาคำสั่งและเวลาปัจจุบันที่ด้านบนของจอแสดงผลรวมถึงบรรทัดว่างต่อไปนี้
พบหน้า man Linux / Unix ได้ที่นี่
watch mysql dbname -e \"show processlist\;\"
brew install watch
while true; do
sleep 5
ls -l
done
watch
ยังมีผลข้างเคียงที่โชคร้ายของการล้างหน้าจอดังนั้นบางครั้งการวนซ้ำก็มีประโยชน์ สิ่งที่ใช้ขึ้นอยู่กับรูปแบบที่ต้องการของเอาต์พุต
--differences
เพื่อให้พวกเขาเน้น (ถ้าคุณกังวลเกี่ยวกับการทาสีของอาคาร)
watch
นี้จะดีกว่า watch -n 1 echo ${RANDOM}
นาฬิกาไม่ทำงานตัวอย่างเช่นเมื่อคุณต้องการจำนวนสุ่มสร้างขึ้นในแต่ละภาวนาเช่น การสุ่มจะถูกเรียกเพียงครั้งเดียว
"เฝ้าดู" ไม่อนุญาตให้ใช้เศษเสี้ยวของวินาทีใน Busybox ขณะที่ "sleep" ทำงาน หากสิ่งนั้นมีความสำคัญกับคุณลองสิ่งนี้:
while true; do ls -l; sleep .5; done
sleep
0
ผลตอบแทนที่แล้ว เช่นนี้ฉันกำลังใช้:
while sleep 3 ; do ls -l ; done
นี่สั้นกว่าโซลูชันของ mikhail เล็กน้อย ข้อเสียเปรียบเล็กน้อยคือมันหลับก่อนที่จะรันคำสั่งเป้าหมายเป็นครั้งแรก
หากคำสั่งมีอักขระพิเศษบางอย่างเช่นไพพ์และเครื่องหมายคำพูดคำสั่งจะต้องถูกเสริมด้วยคำพูด ตัวอย่างเช่นหากต้องการทำซ้ำls -l | grep "txt"
คำสั่ง watch ควรเป็น:
watch -n 5 'ls -l | grep "txt"'
การรันคำสั่งเป็นระยะโดยไม่มี cron เป็นไปได้เมื่อเราไปด้วย while
เป็นไปได้เมื่อเราไปด้วย
เป็นคำสั่ง:
while true ; do command ; sleep 100 ; done &
[ ex: # while true; do echo `date` ; sleep 2 ; done & ]
ตัวอย่าง:
while true
do echo "Hello World"
sleep 100
done &
อย่าลืมคนสุดท้าย&
เพราะมันจะทำให้วงของคุณอยู่ในพื้นหลัง แต่คุณต้องค้นหารหัสกระบวนการด้วยคำสั่ง "ps -ef | grep your_script" จากนั้นคุณต้องฆ่ามัน ดังนั้นโปรดเพิ่ม '&' เมื่อคุณเรียกใช้สคริปต์
# ./while_check.sh &
นี่คือลูปเดียวกันกับสคริปต์ สร้างไฟล์ "while_check.sh" และวางไว้ใน:
#!/bin/bash
while true; do
echo "Hello World" # Substitute this line for whatever command you want.
sleep 100
done
จากนั้นเรียกใช้โดยพิมพ์ bash ./while_check.sh &
echo $!
หลังจากกระบวนการพื้นหลังแต่ละกระบวนการเปิดตัวนั่นคือ PID ของกระบวนการลูกล่าสุดที่เปิดตัวในพื้นหลัง
echo `date`
date
เป็นเพียงวิธีที่ยากจนและรถเล็กน้อยที่จะเขียนเพียง (ข้อผิดพลาดได้จะทำอย่างไรกับการขาดการอ้างของการโต้แย้งไปecho
.) ดูเพิ่มเติมการใช้งานไร้ประโยชน์ echo
ดูดี แต่จะทำความสะอาดหน้าจอ
watch -n 1 'ps aux | grep php'
หากคุณต้องการหลีกเลี่ยง "การดริฟท์" หมายถึงคุณต้องการให้คำสั่งดำเนินการทุก ๆ N วินาทีโดยไม่คำนึงว่าคำสั่งนั้นใช้เวลานานเท่าใด (สมมติว่าใช้เวลาน้อยกว่า N วินาที) นี่คือ bash ที่จะทำซ้ำคำสั่งทุก 5 วินาทีด้วย ความแม่นยำที่สอง (และจะพิมพ์คำเตือนหากไม่สามารถติดตามได้):
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
มันอาจยังลอยอยู่เล็กน้อยเนื่องจากการนอนหลับนั้นแม่นยำเพียงหนึ่งวินาที คุณสามารถปรับปรุงความแม่นยำนี้ได้โดยการใช้คำสั่ง date
หากคุณต้องการทำบางสิ่งบางอย่างตามจำนวนที่กำหนดคุณสามารถทำสิ่งนี้ได้ตลอดเวลา:
repeat 300 do my first command here && sleep 1.5
for x in {1..300} ; do
คำสั่ง bash do||break;sleep 1.5; done
คุณสามารถเรียกใช้สิ่งต่อไปนี้และกรองขนาดได้เท่านั้น หากไฟล์ของคุณถูกเรียกว่า somefilename
คุณสามารถทำดังต่อไปนี้
while :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done
หนึ่งในความคิดมากมาย
เพื่อลดการเบี่ยงเบนได้ง่ายขึ้นให้ใช้:
while :; do sleep 1m & some-command; wait; done
จะยังคงมีจำนวนเล็กน้อยของการดริฟท์เนื่องจากเวลาของ bash ในการรันโครงสร้างลูปและคำสั่ง sleep เพื่อดำเนินการจริง
คำใบ้: ':' จะมีค่าเท่ากับ 0 นั่นคือจริง
watch -n 5 'ls -l
จะเรียกใช้ls -l
คำสั่งหลังจากทุก 5 วินาที
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
โซลูชันรัดกุมซึ่งมีประโยชน์อย่างยิ่งหากคุณต้องการรันคำสั่งซ้ำ ๆ จนกว่าจะล้มเหลวและให้คุณเห็นเอาต์พุตทั้งหมด
while ls -l; do
sleep 5
done