linux 重复,在Linux中自动重复命令

Watch every 5 seconds ...

watch -n 5 ls -l

If you wish to have visual confirmation of changes, append --differences prior to the ls command.

According to the OSX man page, there's also

The --cumulative option makes highlighting "sticky", presenting a

running display of all positions that have ever changed. The -t

or --no-title option turns off the header showing the interval,

command, and current time at the top of the display, as well as the

following blank line.

Linux/Unix man page can be found here

while true; do

sleep 5

ls -l

done

"watch" does not allow fractions of a second in Busybox, while "sleep" does. If that matters to you, try this:

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

sleep already returns 0. As such, I'm using:

while sleep 3 ; do ls -l ; done

This is a tiny bit shorter than mikhail's solution. A minor drawback is that it sleeps before running the target command for the first time.

If the command contains some special characters such as pipes and quotes, the command needs to be padded with quotes. For example, to repeat ls -l | grep "txt", the watch command should be:

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

Running commands periodically without cron is possible when we go with while.

As a command:

while true ; do command ; sleep 100 ; done &

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

Example:

while true

do echo "Hello World"

sleep 100

done &

Do not forget the last & as it will put your loop in the background. But you need to find the process id with command "ps -ef | grep your_script" then you need to kill it. So kindly add the '&' when you running the script.

# ./while_check.sh &

Here is the same loop as a script. Create file "while_check.sh" and put this in it:

#!/bin/bash

while true; do

echo "Hello World" # Substitute this line for whatever command you want.

sleep 100

done

Then run it by typing bash ./while_check.sh &

watch is good but will clean the screen.

watch -n 1 'ps aux | grep php'

If you want to avoid "drifting", meaning you want the command to execute every N seconds regardless of how long the command takes (assuming it takes less than N seconds), here's some bash that will repeat a command every 5 seconds with one-second accuracy (and will print out a warning if it can't keep up):

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

It may still drift a little since the sleep is only accurate to one second. You could improve this accuracy by creative use of the date command.

You can run the following and filter the size only. If your file was called somefilename you can do the following

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

One of the many ideas.

If you want to do something a specific number of times you can always do this:

repeat 300 do my first command here && sleep 1.5

To minimize drift more easily, use:

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

there will still be a tiny amount of drift due to bash's time to run the loop structure and the sleep command to actually execute.

hint: ':' evals to 0 ie true.

watch -n 5 'ls -l

Will Runls -l command after every 5s

Output :-

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值