许多公有云或VPS服务商(尤其是一些提供免费试用或严格限制闲置资源的厂商)会监控虚拟机的活动状态。如果一个VPS长时间处于零负载、零网络流量的状态,它可能会被判定为“闲置”并被暂停或回收。对于个人站长来说,这可能导致网站意外中断。解决这个问题的方法是定期产生微小的、无害的系统活动(微负载),以确保主机状态始终处于“活跃”状态。
本文将指导您如何使用一个简单的Bash脚本和Crontab定时任务,来模拟持续的、可忽略不计的CPU和磁盘I/O活动。
第一步:创建微负载“保活”脚本
我们将创建一个名为 keep_alive.sh 的脚本,它将执行一个快速的数学计算(产生CPU活动)并写入一个时间戳日志文件(产生磁盘I/O活动)。
首先,通过SSH连接到您的VPS,并在 /usr/local/bin/ 目录下创建并编辑脚本文件:
sudo nano /usr/local/bin/keep_alive.sh
粘贴以下内容:
#!/bin/bash
# 临时文件路径
ACTIVITY_LOG="/tmp/vps_activity.log"
# 1. 产生微小的 CPU 负载
# 使用 'bc' 计算一个简单的数学表达式,例如计算 Pi 的前几位
# 这是一个耗时极短,但可被系统监控到的 CPU 活动。
RESULT=$(echo "scale=5; 4 * a(1)" | bc -l)
# 2. 产生微小的 Disk I/O 活动
# 记录当前时间戳和计算结果到日志文件中
echo "$(date '+%Y-%m-%d %H:%M:%S') - Keep alive signal generated. CPU Result: $RESULT" >> $ACTIVITY_LOG
# 3. 日志清理 (防止日志文件无限增大)
# 仅保留最近的100行记录
tail -n 100 $ACTIVITY_LOG > ${ACTIVITY_LOG}.tmp
mv ${ACTIVITY_LOG}.tmp $ACTIVITY_LOG
# 脚本结束
exit 0
保存并退出编辑器(Nano中按 Ctrl+X,然后Y,回车)。
第二步:赋予脚本执行权限
确保脚本是可执行的:
sudo chmod +x /usr/local/bin/keep_alive.sh
第三步:设置Crontab定时任务
现在我们需要设置一个定时任务(Cron Job),让这个脚本每隔一段时间自动运行。推荐间隔设置为5到10分钟。
编辑当前用户的 Crontab 文件:
crontab -e
在文件末尾添加以下一行。这行命令的意思是:每隔10分钟运行一次 **/usr/local/bin/keep_alive.sh 脚本**。
*/10 * * * * /usr/local/bin/keep_alive.sh > /dev/null 2>&1
保存并退出 Crontab 编辑器。
第四步:验证脚本是否正常运行
等待大约10到20分钟,然后检查日志文件 /tmp/vps_activity.log 是否有新的时间戳生成。
cat /tmp/vps_activity.log
您应该能看到类似以下的输出,并且时间戳是持续更新的:
2023-10-27 10:00:00 - Keep alive signal generated. CPU Result: 3.14159
2023-10-27 10:10:00 - Keep alive signal generated. CPU Result: 3.14159
2023-10-27 10:20:00 - Keep alive signal generated. CPU Result: 3.14159
如果日志文件在持续更新,说明您的微负载脚本已成功部署并正在有效地模拟系统活动,从而大大降低了VPS因“长时间闲置”而被回收的风险。这个脚本产生的负载极小,不会影响VPS的正常性能或造成服务商的滥用警告。
汤不热吧