如何永远每隔X秒运行Linux命令

时间:2020-03-21 11:46:54  来源:igfitidea点击:

我们是否曾经遇到过必须每隔几秒钟重复运行一次特定的Linux命令的情况?
好吧,如果我们还不知道,本教程将教我们如何操作。
当然,我们可以使用Shell脚本或者cron作业来执行此操作。

我们也可以按特定的间隔重复执行Linux命令,而不必每次都手动运行它。
这是Watch命令派上用场的地方。
此命令可用于重复执行给定命令,并监视输出。
简单来说,我们可以使用Watch命令永远每隔X秒运行一次Linux命令,它将一直在控制台中显示输出,直到我们通过按CTRL + C手动将其停止或者杀死进程或者强制重新引导系统为止。
默认情况下,给定命令将每2秒运行一次,或者我们可以定义选择的时间间隔。

使用Watch命令永远每隔X秒运行一次Linux命令

watch命令的语法为:

$watch [options] command

下面,我给出了一些示例,教我们其中可以使用watch命令重复运行特定的Linux命令。

范例1:

假设我们要每2秒运行一次“ uptime”命令以监视系统的正常运行时间。
为此,只需运行:

$watch uptime

输出示例:

Every 2.0s: uptime                                     sk Wed Nov  9 20:14:46 2016
 20:15:46 up  2:38,  1 users,  load average: 0.41, 0.35, 0.46

其中

  • 每2.0秒:正常运行时间-“正常运行时间”命令每2秒运行一次并显示结果。
  • sk-当前登录的用户
  • 2016年2月9日星期三20:14:46-执行命令的当前日期和时间

这将一直运行,直到我们手动结束它为止。
要退出命令,请按CTRL + C。

我们还可以将正常运行时间的输出保存在文件中。
为此,请运行:

$watch `uptime` > uptime.txt

或者

$watch `uptime` > uptime.doc

当我们希望将系统的正常运行时间发送给技术支持以获取帮助时,此功能很有用。

范例2:

如前所述,默认情况下,watch命令每2秒执行一次程序。
我们可以使用“ -n”参数将其更改为特定的时间间隔,例如5秒。

让我们每5秒显示一次文件系统磁盘空间使用情况。

$watch -n 5 df -h

输出示例:

Every 5.0s: df -h sk: Wed Jan 9 20:19:09 2016
Filesystem Size Used Avail Use% Mounted on
dev 3.9G 0 3.9G 0% /dev
run 3.9G 1.1M 3.9G 1% /run
/dev/sda2 457G 357G 77G 83% /
tmpfs 3.9G 32M 3.9G 1% /dev/shm
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
tmpfs 3.9G 36K 3.9G 1% /tmp
/dev/loop0 83M 83M 0 100% /var/lib/snapd/snap/core/4327
/dev/sda1 93M 55M 32M 64% /boot
tmpfs 789M 28K 789M 1% /run/user/1000

要检查此命令是否确实有效,请创建或者删除任何文件/文件夹。
我们会注意到,在创建或者删除文件/文件夹后,输出中的可用空间已更改。

范例3:

要查看目录更改的内容,请运行:

$watch -d ls -l

其中-d或者--differences标志将突出显示连续更新之间的差异。

输出示例:

total 3857440
-rw------- 1 sk users 1921843200 Apr 25 22:47 bionic-desktop-amd64.iso
-rw------- 1 sk users 1921843200 Apr 25 03:02 bionic-desktop-amd64.iso.zs-old
drwxr-xr-x 2 sk users 12288 Jan 8 18:45 Desktop
drwxr-xr-x 2 sk users 4096 Apr 20 16:54 Documents
drwxr-xr-x 11 sk users 4096 Jan 9 19:56 Downloads
drwxr-xr-x 2 sk users 4096 Jan 7 2016 Music
drwxr-xr-x 5 sk users 12288 Mar 23 17:34 Pictures
drwxr-xr-x 2 sk users 4096 Jan 11 2015 Public

另外,我们可以显示特定用户(Ex.sk)拥有的目录更改的内容。

$watch -d 'ls -l | fgrep sk'

这在多用户系统中很有用。

范例4:

要显示内存详细信息,请运行:

$watch -d free -m

范例5:

要每10秒显示du命令的输出,可以使用:

$watch -n 10 du -h

输出示例:

Every 10.0s: du -h                                                                                                                              sk: Wed Jan 9 20:26:43 2016
17M     ./.disruptive innovations sarl/bluegriffon/q87d9o6v.default/extensions
16K     ./.dooble/Dooble
4.0K    ./.dooble/Histories
176K    ./.dooble
4.0K    ./.PlayOnLinux/wine/mono
13M     ./.PlayOnLinux/wine/gecko
4.0K    ./.PlayOnLinux/wine/linux-amd64
652K    ./.PlayOnLinux/wine/linux-x86/1.3.19/share/wine/fonts
872K    ./.PlayOnLinux/wine/linux-x86/1.3.19/share/wine

这会每10秒监视一次磁盘使用情况,直到我们手动退出磁盘为止。

有关更多详细信息,建议我们参考手册页。

$man watch

使用While循环永远每隔X秒运行Linux命令

我们还可以在While循环的帮助下执行此操作。

要永远每2秒重复一次命令,请运行:

$while sleep 2 ; do uptime ; done

输出示例:

21:10:21 up 10:12,  1 user,  load average: 0.83, 0.71, 0.59
21:10:23 up 10:12,  1 user,  load average: 0.76, 0.70, 0.59
21:10:25 up 10:12,  1 user,  load average: 0.76, 0.70, 0.59
21:10:27 up 10:12,  1 user,  load average: 0.70, 0.68, 0.58
[...]