我必须编写一个维护脚本来迭代我们的 IP,测试它们与某些服务(例如nc -sip# mailin-01.mx.aol.com 25
.
它有一面旗帜-w ...
,但它不是我想象的那样。也就是说,我只希望这个程序最多运行 3 秒,并且我们连接到的地方始终处于运行状态(除非脚本不应该担心的主要网络问题 --- 不是它的特定工作,并且会在之前注意到)脚本已运行)。
我只需要它来连接并查看是否收到错误消息。在我们为用户的网页分配 IP 之前,这是必需的(这是 CPanel 东西的替代品——我们想要我们自己的)。
答案1
最简单的方法是使用timeout
命令。该timeout
命令允许您运行指定的命令,如果该命令在一定的超时时间内没有退出,timeout
则将其终止。
例如
# timeout 3 sleep 1; echo exit=$?
exit=0
# timeout 3 sleep 5; echo exit=$?
exit=124
# timeout 3 nc google.com 80; echo exit=$?
nc: using stream socket
exit=124
timeout
没有在 POSIX 标准中定义,因此不能保证它无处不在,但它似乎很普遍。
答案2
http://www.varesano.net/blog/fabio/executing-program-x-seconds-then-killing-it-simple-bash-script
这有效
#!/bin/bash
cmd=$1
seconds=$2
echo "Executing: ${cmd} for $seconds seconds"
$cmd&
cmdpid=$!
sleep $seconds
if [ -d /proc/$cmdpid ]
then
echo "terminating program PID:$cmdpid"
kill $cmdpid
fi