172 command-line bash scripts monitoring
如何在每个时间间隔重复一个命令,以便它允许我运行命令以进行检查 或监视 目录的?
不需要脚本,我只需要在终端中执行一个简单的命令。
nux*_*nux 243
您可以使用 watch
命令,观察用于定期运行任何指定的命令。
打开终端并输入:
watch -n x <your command>
Run Code Online (Sandbox Code Playgroud)
改变x为您想要的时间(以秒为单位)。
有关使用该watch
命令及其选项的更多帮助,请运行man watch
或访问此链接。
例如:以下将每隔60 秒在同一终端上列出Desktop 目录的内容,以便您知道是否发生了任何更改:
watch -n 60 ls -l ~/Desktop
Run Code Online (Sandbox Code Playgroud)
sou*_* c. 108
除了nux 的回答之外,您还可以在终端中使用此命令:
while true; do <your_command>; sleep <interval_in_seconds>; done
Run Code Online (Sandbox Code Playgroud)
例子:
while true; do ls; sleep 2; done
Run Code Online (Sandbox Code Playgroud)
此命令将打印输出 ls
2 秒的间隔。
使用Ctrl+C停止该过程。
有几个缺点watch
:
watch
将解释使用-c
或--color
选项传递转义字符的 ANSI 颜色序列。例如输出pygmentize
将工作,但它会失败ls --color=auto
。在上述情况下,这可能是一个更好的选择。
d33*_*tah 38
虽然watch
在 Ubuntu 上可以完美运行,但如果你希望你的“Unix-fu”是纯的,你可能想避免这种情况。例如,在 FreeBSD 上,watch
是一个“窥探另一条 tty 线路”的命令。
while true; do command; sleep SECONDS; done
还有一个警告:使用Ctrl+可能更难杀死您的命令C。您可能更喜欢:
while sleep SECONDS; do command; done
Run Code Online (Sandbox Code Playgroud)
它不仅更短,而且更容易中断。需要注意的是,它将首先休眠,然后运行您的命令,因此您需要等待一段时间SECONDS
才能第一次出现该命令。
Lek*_*eyn 14
听起来像是cron
守护进程的理想任务,它允许运行定期命令。运行crontab -e
命令开始编辑用户的 cron 配置。它的格式记录在crontab(5) 中。基本上,您有五个与时间相关、以空格分隔的字段,后跟一个命令:
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sunday, or use names)
Run Code Online (Sandbox Code Playgroud)
例如,如果您想在每周二的上午 11 点运行 Python 脚本:
0 11 * * 1 python ~/yourscript.py
Run Code Online (Sandbox Code Playgroud)
还有一些特殊的名称可以代替时间,例如@reboot
. 如果您需要创建临时目录,则非常有用。从我的 crontab(列出crontab -l
):
# Creates a temporary directory for ~/.distcc at boot
@reboot ln -sfn "$(mktemp -d "/tmp/distcc.XXXXXXXX")" "$HOME/.distcc"
Run Code Online (Sandbox Code Playgroud)
如果您正在监视文件系统,则 inotifywait
它非常棒,并且肯定会给您的系统增加更少的负载。
例子 :
在第一个终端中输入以下命令:
$ inotifywait .
Run Code Online (Sandbox Code Playgroud)
然后在第二个终端中,任何影响当前目录的命令,
$ touch newfile
Run Code Online (Sandbox Code Playgroud)
然后在原来的终端中,inotifywait 会唤醒并报告事件
./ CREATE newfile2
Run Code Online (Sandbox Code Playgroud)
或者在一个循环中
$ while true ; do inotifywait . ; done
Setting up watches.
Watches established.
./ OPEN newfile2
Setting up watches.
Watches established.
./ OPEN newfile2
Setting up watches.
Watches established.
./ DELETE newfile
Setting up watches.
Watches established.
./ CREATE,ISDIR newdir
Setting up watches.
Watches established.
Run Code Online (Sandbox Code Playgroud)
您可以使用 crontab。运行命令crontab -e
并使用您喜欢的文本编辑器打开它,然后添加这一行
*/10 * * * * /path-to-your-command
Run Code Online (Sandbox Code Playgroud)
这将每 10 分钟运行一次您的命令
* */4 * * * /path-to-your-command
Run Code Online (Sandbox Code Playgroud)
这将每 4 小时运行一次您的命令
$ ..some command...; for i in $(seq X); do $cmd; sleep Y; done
Run Code Online (Sandbox Code Playgroud)
X次重复。
Y时间等待重复。
例子 :
$ echo; for i in $(seq 5); do $cmd "This is echo number: $i"; sleep 1;done
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以repeat
按照以下步骤创建自己的命令;学分在这里:
首先,打开你的.bash_aliases
文件:
$ xdg-open ~/.bash-aliases
Run Code Online (Sandbox Code Playgroud)
其次,将这些行粘贴到文件底部并保存:
repeat() {
n=$1
shift
while [ $(( n -= 1 )) -ge 0 ]
do
"$@"
done
}
Run Code Online (Sandbox Code Playgroud)
第三,关闭并再次打开您的终端,或输入:
$ source ~/.bash_aliases
Run Code Online (Sandbox Code Playgroud)
等等!您现在可以像这样使用它:
$ repeat 5 echo Hello World !!!
Run Code Online (Sandbox Code Playgroud)
或者
$ repeat 5 ./myscript.sh
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
332825 次 |
最近记录: |