Bash脚本如何根据时间监视进程......如果2分钟内没有响应则重启

时间:2012-03-14 12:19:25

标签: bash

我已经创建了一个bash脚本来监控Symantec命令行扫描服务,这是以后脚本的一部分我发送了我创建的日志文件的电子邮件,这是一个每两个小时发送一次电子邮件的cron作业。

现在我的问题是,有时ssecls脚本没有响应而且卡住了。如何对下面的每个4台服务器进行时间检查,以便在ssecls没有响应时,将重新启动Symantec服务。我创建了另一个脚本来重启服务。

我唯一的问题是,如何检查以下进程是否没有响应或挂起.... 2分钟的间隔。

#!/bin/bash
# Symatec Scan Command Line Scanner Options

cd /opt/SYMCScan/ssecls/
echo "Testing servera1 Scan Engine" `./ssecls /home/symtec/ -server Server1 -mode scan -verbose -details -timing -recurse -onerror leave -log /home/symtec/work/ssecls_log_serveraavr01`

echo "Testing server02 Scan Engine" `./ssecls /home/symtec/ -server Server2 -mode scan -verbose -details -timing -recurse -onerror leave -log /home/symtec/work/ssecls_log_serverdavr01`

echo "Testing server03 Scan Engine" `./ssecls /home/symtec/ -server  Server3 -mode scan -verbose -details -timing -recurse -onerror leave -log /home/symtec/work/ssecls_log_server1avr01`

echo "Testing server04 Scan Engine" `./ssecls /home/symtec/ -server Server4 -mode scan -verbose -details -timing -recurse -onerror leave -log /home/symtec/work/ssecls_log_server4avr01`

2 个答案:

答案 0 :(得分:1)

timeout是为了这样的用途而编写的。

timeout 120 ./ssecls ...

您甚至可以将其配置为发送除kill之外的信号,并在此之后将其删除一段时间。 因为后退标记在命令行之前执行,所以您需要将timeout放在其中。

要重新启动,您需要一个循环。

until timeout 120 ./ssecls ...; do
    echo Timed out, restarting.
done

答案 1 :(得分:0)

  

超时:未找到命令。

你可以用这个bash函数实现类似的东西:

timeout()
{
    time=$1; shift
    "$@"& pid=$!
    ( sleep $time; kill $! )&
    wait $pid && kill $!
}

按照Kevin的回答中所述调用此函数。