如何永远每隔X秒运行Linux命令
我们是否曾经遇到过必须每隔几秒钟重复运行一次特定的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 [...]