Image

知识库 → 设置 crontab 脚本以避免高负载

[虚拟服务器]
出版日期: 27.01.2023

当没有任何保护服务能够抵御攻击或服务器由于其他原因开始在高负载下工作时。 我们建议安装该脚本并通过 crontab 服务每分钟运行一次。 这将使您不会在关键负载期间失去对服务器的访问,并采取措施消除这种情况。

/etc/cron.daily/load-average-2.sh

#!/bin/bash

loadavg=`uptime | awk '{print $10+0}'`
# bash doesn't understand floating point
# so convert the number to an interger
thisloadavg=`echo $loadavg|awk -F \. '{print $1}'`
if [ "$thisloadavg" -ge "2" ]; then
echo "Busy - Load Average $loadavg ($thisloadavg) "
echo 'Warning - Load AVG (my.server.tld) on:' `date` `uptime` | mailx -s "Warning: LA from `uptime | cut -d'(' -f2 | cut -d')' -f1`" -S smtp=smtp://mail.server.tld -S smtp-auth=login -S smtp-auth user=user@domain.tld -S smtp-auth-password=PassW0rd -S from="LLC COMPANY" to@domain.tld

else
echo "Okay - Load Average $loadavg ($thisloadavg) "
fi

该脚本必须保存在/etc/cron.daily文件夹下的load-average-2.sh文件中,并设置执行权限。

然后你需要通过 crontab -e 命令添加一行以每 2 分钟运行一次:

*/2 * * * * /etc/cron.daily/load-average-2.sh >> /dev/null 2>&1

这些值必须替换为您自己的值:

  • my.server.tld - 您要安装脚本的服务器的名称。
  • mail.server.tld - 脚本将通过其向您发送通知的邮件服务器的域名。
  • user@domain.tld - 用于连接邮件服务器(登录)的邮箱名称。
  • PassW0rd - 您的邮件帐户的密码。
  • LLC COMPANY - 发送信件的名称和地址。
  • to@domain.tld - 发送通知的邮寄地址。

如果平均负载超过 2,即 200%(2核),脚本将发送通知。 该参数突出显示,您可以根据服务器的核心数将其更改为自己的参数。 例如,如果您有 4 个核心,那么最大负载将为 4,即 400%。

如果需要,您可以在脚本中添加需要执行的命令,例如重新启动服务以减轻负载。 您需要在其他之前添加它们,例如:

service nginx restart
service ddos restart
service httpd restart




暂时没有评论