在Linux命令行中,是否有可能每n秒重复一次命令?
假设,我有一个导入正在运行,我正在做
ls -l
检查文件大小是否在增加。我想有一个命令,有这个自动重复。
在Linux命令行中,是否有可能每n秒重复一次命令?
假设,我有一个导入正在运行,我正在做
ls -l
检查文件大小是否在增加。我想有一个命令,有这个自动重复。
每5秒看一次……
看-n 5 ls -l
如果您希望可视化地确认更改,可以在ls命令之前添加——differences。
根据OSX手册页,还有
-cumulative选项使高亮显示“粘性”,显示一个 运行显示所有曾经改变的位置。- t 或者——no-title选项关闭显示间隔的标题, 命令,并在顶部显示当前时间,以及 下面是空行。
Linux/Unix手册页可以在这里找到
您可以运行以下命令并仅过滤大小。如果文件名为somefilename,可以执行以下操作
而:;Do ls -lh | awk '/some*/{print $5}';睡眠5;完成
众多想法之一。
在Busybox中,“watch”一秒都不允许,而“sleep”一秒允许。如果这对你来说很重要,试试这个:
while true; do ls -l; sleep .5; done
当我们使用while时,可以不使用cron定期运行命令。
作为命令:
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”找到进程id,然后你需要杀死它。因此,请在运行脚本时添加'&'。
# ./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 &来运行它
如果你想避免“漂移”,这意味着你想让命令每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命令来提高这种准确性。
如果命令中包含一些特殊字符,如管道字符、引号等,则需要使用引号进行填充。例如,要重复ls -l | grep "txt",则watch命令应为:
查看-n 5 'ls -l | grep "txt"'
Sleep已经返回0。因此,我使用:
while sleep 3 ; do ls -l ; done
这比米哈伊尔的解要短一点。一个小缺点是它在第一次运行目标命令之前处于休眠状态。
为了更容易地减少漂移,使用:
while :; do sleep 1m & some-command; wait; done
由于bash运行循环结构和sleep命令实际执行的时间,仍然会有少量的漂移。
提示:':'的值为0即为真。
watch -n 5 'ls -l
Runls -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
我创建了一个shell别名,它将监视每x秒传递给它的命令。命令可以是单独的参数,也可以用分号分隔。
# execute commands at a specified interval of seconds
function watch.command {
# USAGE: watch.commands [seconds] [commands...]
# EXAMPLE: watch.command 5 date
# EXAMPLE: watch.command 5 date echo 'ls -l' echo 'ps | grep "kubectl\\\|node\\\|npm\\\|puma"'
# EXAMPLE: watch.command 5 'date; echo; ls -l; echo; ps | grep "kubectl\\\|node\\\|npm\\\|puma"' echo date 'echo; ls -1'
local cmds=()
for arg in "${@:2}"; do
echo $arg | sed 's/; /;/g' | tr \; \\n | while read cmd; do
cmds+=($cmd)
done
done
while true; do
clear
for cmd in $cmds; do
eval $cmd
done
sleep $1
done
}
https://gist.github.com/Gerst20051/99c1cf570a2d0d59f09339a806732fd3