如何根据 http 请求自动启动、停止服务器?

如何根据 http 请求自动启动、停止服务器?

我正在使用云服务(例如 AWS EC2)作为我的开发服务器。这些服务器通常都是大型服务器,我为它们付费。使用它们后,有时我会忘记它们运行了好几天,所以我最终要支付更多费用。

当在 http 端点上发出 http 请求时,如何启动我的实例?“然后”如果在过去 1 小时内没有收到任何请求,我该如何停止我的实例?

请随意分享任何应用程序、服务、代码或设计。

非常感谢

更多细节可以更好地解释问题:

  • 当我尝试访问开发环境 URL 时,我希望有一个临时网页(或代理?),上面显示“启动服务器”,然后将我重定向到应用程序。
  • 我知道 EC2 中的调度。但如果没有更多请求到达该服务器,我需要自动关闭。而且我可能随时尝试访问我的服务器。
  • 我无法考虑设置一个 cron 任务来关机。我需要更好的解决方案,原因与上面的选项相同。

答案1

基本上是两个问题:

  • 启动 VPS
  • 一个用于关闭它

启动

首先你需要安装ec2 cli toolshttps://aws.amazon.com/cli/

首先,您可以创建自己的服务器作为代理(本地主机)。创建一个可以调用的 php、python 等页面。该页面将打开一个测试页面,如果超时(x 秒),您可以调用 cli ec2 来启动特定实例。

或者,您可以在开发服务器启动后调用 ec2 脚本来启动您的 VPS(例如,我正在使用 Ruby on Rails,一旦我开始开发代码,只需调用一个脚本来启动服务器就非常容易了)

https://boto3.readthedocs.io/en/latest/guide/ec2-example-managing-instances.html

关闭

为了关闭服务器,我会创建一个 cron,在您的每台开发服务器上每 x 分钟(每小时?)运行一次。您基本上会跟踪开发日志的结果并创建一个MD5,只要 MD5 发生变化,您就知道服务器正在使用。因此,为了使其正常工作,我会花大量时间检查(即不是每分钟)。添加了一封电子邮件,以便在启动关闭时通知您。

假设你的开发日志有时间戳,应该很好。

示例关机脚本

#!/bin/sh
# /etc/cron.hour/autoshutdown
# Example EC2 auto shutdown script
# Place in your /etc/cron.hourly

LOG_FILE=/path/to/my/development.log
MD5_FILE=/tmp/my.log.md5
[email protected]

echo "Create MD5..."
cur_md5=`tail $LOG_FILE | md5`

echo "Read latest MD5..."
if [ -f $MD5_FILE ]; then
    last_md5=`cat $MD5_FILE`
else
    echo "No MD5 found, 1st time use..."    
    last_md5='no sig. found'
fi

if [ "$cur_md5" = "$last_md5" ]; then   
    echo "MD5 signatures are identical, nothing changed we can stop the server..."
    echo "Server is been shutdown" | mail -s "Server $(hostname) has been shutdown..." $NOTIFY
    # shutdown -h now
else
    echo "Current MD5 [$cur_md5]"
    echo "Last MD5   [$last_md5]"
    echo "MD5 changed, we are still using the sever..."
    echo "Updating signature..."
    echo $cur_md5 > $MD5_FILE
fi

当然,没有保证,只是我的想法 ;-)

相关内容