我在 Ubuntu 12.04 精确服务器上运行用于网页抓取项目的 Python 脚本和 Scrapy 框架。这些脚本全天运行。
该项目处于开发/测试阶段。所以我不知道该项目的系统要求是什么。
我以 512MB RAM 和 30GB 硬盘启动它。由于硬盘空间不足,系统崩溃了。因此我必须再次设置服务器,并以 512MB RAM 和 100GB 硬盘重新启动我的项目。
由于 RAM/SWAP 容量较小,系统再次崩溃。
有没有办法检查 RAM 和硬盘?
因此,在server crash
它终止所有程序并向我发送电子邮件说由于空间不足所有程序都被终止之前,请增加您的 RAM/硬盘大小。
我正在寻找一个由每分钟运行一次的 cronjob 处理的 shell 脚本来检查磁盘是否已满。
答案1
监控
AWS 有一项名为 CloudWatch 的服务,可以监控系统运行状况。http://aws.amazon.com/cloudwatch/
您可以根据云监控指标自己编写诸如“终止程序并发送电子邮件”之类的脚本。
当然,还有很多其他工具可以监控系统的健康状况,例如:
但监控并不是您唯一能做的事情!
您还可以做很多其他的事情。
您可以将数据存储在 AWS S3 中。这样就不会耗尽磁盘空间。
您可以在自动缩放组中或许多其他配置中使用多个 EC2 实例,以允许它们共享负载。
AWS 拥有多种可为您管理且扩展的数据库服务。
答案2
这监控工具可以做您需要做的——监控内存和磁盘使用情况,终止有问题的进程并提醒您。
答案3
实际上,您似乎正在寻找一种“简单而粗暴”的解决方案,它可能类似于:
#!/bin/bash
partition="/dev/sda1";
minRAM=512
minDisk=1024
maxSwapUsed=1024
freeMem=$(free -m | grep Mem | awk {'print $4'});
usedSwap=$(free -m | grep Swap | awk {'print $3'});
freeDisk=$(df -m | grep $partition | awk {'print $4'});
echo "RAM free = " $freeMem;
echo "Swap used = " $usedSwap;
echo "Disk free = " $freeDisk;
if [ "$freeMem" -gt "$minRAM" ] && [ "$freeDisk" -gt "$minDisk" ] && [ "$usedSwap" -lt "$maxSwap" ]; then {
echo "Everything is ok";
} else {
echo "Kill da pid";
fi
将其添加到您的 crontab,设置 mins/max/partition 以及在 pkill 中要采取的操作。无论如何,nagios / snmpchecks 会更合适,而且显然更复杂和精确。