限制snmp trap触发的bash脚本执行次数

问题描述 投票:0回答:1

当陷阱到达我的系统时,我会自动执行 bash 脚本。问题是有时大量陷阱同时到达,导致大量执行脚本并生成系统 cpu 峰值 你知道如何避免这种情况吗?我想到了某种机制,只执行确定的脚本,其余的像 FIFO 队列一样等待,但我不知道这是否可能

谢谢

bash cpu snmp snmp-trap
1个回答
0
投票

这是一种可能的解决方案,可以防止同时多次执行脚本。

首先,您将定义一个 fifo:

mkfifo /some/directory/fifo

然后,您将创建一个读取 fifo 的脚本:

#!/bin/bash
tail -f /some/directory/fifo | read line ; do
    process "$line"
done

当陷阱到达时,执行以下脚本:

#!/bin/bash
echo "something from the trap" > /some/directory/fifo

在 fifo 上发布消息的脚本是轻量级的,因此产生的峰值比整个处理要少。现在处理已序列化,因此在给定时间仅运行一个处理脚本。您还可以

nice
进行处理,以减少影响。

回声应该足够原子,以防止大多数时候出现交错行。

另一种选择是使用锁来防止多个副本同时执行。看起来像:

#!/bin/bash
me=$$
echo $me>>lockfile
lockedby=$(head -1 lockfile)
while [ "$me" != "$lockedby" ] ; do
    sleep 1
    echo $me>>lockfile
    lockedby=$(head -1 lockfile)
done

process the trap

rm -f lockfile
© www.soinside.com 2019 - 2024. All rights reserved.