0

我想这可能是一个奇怪的问题,但我有一个小的 EC2 实例,每个月要花一大笔钱。不过它是按小时收费的,所以我只在需要时打开这个特定实例,并在完成后关闭它。

这个实例的目的是托管一个反恐精英:全球攻势专用服务器,我只有在我有训练赛要玩时才打开它。

我没有忘记关闭它并被收取很多费用,或者有一个不智能的启动脚本要求实例在 3 小时后关闭电源,而是在考虑更智能的设计。

这是我的想法;当实例不再使用时,它会智能地自行关闭电源,方法是确定过去 10 分钟内是否没有记录 UDP 27015 上的一定数量的网络活动,在关闭电源前尝试 3 次。

这样我就可以开机,玩比赛,而不必担心关闭服务器:-)

在我脑海里听起来很酷。问题是我如何着手解决任务。我想象在 cron 的帮助下每 10 分钟执行一次 bash 脚本。

如果我在这里不是完全疯了,是否可以提供 bash-script 建议?或者也许是一个更好的解决方案,如何解决我正在进行的这个任务,通过在感应到服务器不再使用时关闭服务器电源来节省 $$!

4

1 回答 1

1

我对 EC2 实例不太熟悉,但如果它们运行某种形式的 linux... 在 Fedora 下,我可以使用ifconfig查看通过网络接口接收/传输了多少数据。它不仅仅是单个端口,而是该接口上的所有端口......这个数字对你来说足够了吗?每隔几分钟监控一次并查看负载何时下降应该是非常简单的......

当 EC2 实例启动并仅记录数据时,可能会启动一个简单的脚本。游戏结束一小时后,您可以获取日志,手动关闭,然后在闲暇时查看它,看看这是否有效。(令人惊讶的是有时有多少东西使用网络......)

事后思考:也许tcpdump会更好?它可以与 UDP 端口 27015 一起使用吗?您可能需要一些方法来使其超时,例如将其作为后台进程运行,可能使用 -c 选项,休眠一段时间,然后在 tcpdump 进程仍在运行时终止它。您可能需要通过wc -l进行管道传输,或者只需grep抓取的最终数据包行。警告: tcpdump可能需要以 root 身份运行。

E.g. /usr/sbin/tcpdump -n -nn -q -c 100 -i eth0 port 27015

进一步的事后思考:

#!/bin/bash --norc                             

/usr/sbin/tcpdump -n -nn -q -i eth0 port 27015 2>./logfile 1>/dev/null &
TCPDUMP_PID=$!

echo "sleeping...  pid=$TCPDUMP_PID"
sleep 30
echo "wake up"
kill $TCPDUMP_PID
sleep 2
cat ./logfile
于 2012-11-10T00:00:20.437 回答