我有一个基本的FreeBSD系统,只有一个终端。我想每15秒左右监控一次zpool status。通常,在“常规”系统上,我会使用watch -n15,但这里不提供。
我不知道我是否想在一个重要的和可能脆弱的主机上安装新的程序。但如果真的很简单的话,我很乐意这么做,我听说过一种叫做cmdwatch的替代品。
监视程序的简单解决方案是使用while循环,即:
while :; do zpool status && sleep 15; done这表面上很管用。但是,现在我不能使用Ctrl + C来中断循环,这是一个很大的麻烦。我可以使用Ctrl +Z把循环放在后台,调用ps得到PID,然后kill -9程序。经常杀人不起作用。
所以这还不够好。对于任何不是我的用户来说,系统看起来都是坏的。另一篇文章指出,我要检查返回代码是否大于128,SIGINT应该给130,如下所示
while [ 1 ]; do zpool status; test $? -gt 128 && break; done如果我只运行sleep 15命令,这是可行的。将更多的命令与;或&&链接在一起,就产生了我无法中断循环的旧情况。
我做什么好?
发布于 2017-02-08 16:54:24
你考虑过用陷阱吗?
#! /bin/sh
trap "break" INT
while :
do
COMMAND && sleep 15
donehttps://unix.stackexchange.com/questions/343496
复制相似问题