从 cron 重新启动弹性 beanstalk 应用程序服务器

Posted

技术标签:

【中文标题】从 cron 重新启动弹性 beanstalk 应用程序服务器【英文标题】:Restarting elastic beanstalk app server from a cron 【发布时间】:2020-10-31 13:58:12 【问题描述】:

我有一个在弹性豆茎上运行的烧瓶应用程序。有一个每天运行的 cron,以便从另一台服务器获取新数据。获取此数据后,需要重新启动应用服务器才能使用新数据进行更新。但是,我似乎无法自动执行此操作。我在 cron 运行的 shell 脚本中尝试了以下几行:

systemctl restart nginx

/sbin/shutdown -r now

但是,即使这确实重新启动了 nginx 并重新启动了整个服务器,数据也不会更新。如果我使用 EB 控制台并转到 Actions > Restart App Server(s),则会加载新数据并且一切正常。我需要将它作为 cron 的一部分,或者我需要将其设置为每天在特定时间重新启动应用服务器。

我该怎么做?在这一点上,我一直在寻找和尝试几天,但似乎无法弄清楚。

【问题讨论】:

Elastic Beanstalk 中运行了多少台服务器?当您通过 cron 重新启动时,是否会为您启动一个新的? 是的,在第一个实例中它不会关闭服务器,但在第二个实例中它会关闭并且它在控制台中显示为“待处理”大约 5 分钟,然后它会重新启动。如果它正在创建一个新实例,我还有一个部署钩子可以做同样的事情,所以应该更新它。我确实知道 cron 正在运行,因为如果我在它应该运行后检查服务器上的数据,它就会被更新。它只是没有被应用程序使用,因为它需要重新启动才能这样做。 @AndrewR 你能添加你的 crontab 来重启服务器吗?我正在尝试做类似的事情,但我的 crontab 似乎没有运行谢谢。 @DavidTeather 不,我也遇到了 crontab 问题。我可以让 cron 在 EB 上工作的唯一方法是通过 .ebextensions。该实例甚至不认为 crontab 正在运行。我确实取得了一些进展,但它仍然没有运行。您可以使用 lambda 中的 AWS admin CLI 编写一个将重新启动应用程序服务器的函数。我仍然无法让异步功能正常工作,但我认为这是唯一的方法。如果我设法让它工作,我会在这里发布解决方案。 【参考方案1】:

重新发送 AWS 博文解释了如何在 EB 上设置 cron:

How do I create cron jobs on Amazon EC2 instances in Elastic Beanstalk environments?

由于您的问题不包含有关您如何设置 cron 的详细信息,也不包含任何有关此问题的文档链接,我认为有必要发布链接以引起您的注意。

【讨论】:

谢谢,但 cron 工作正常。它甚至重新启动服务器。问题是重新启动 Nginx 或重新启动整个实例不会更新 cron 拉入的应用程序中的数据。仅使用控制台并点击“重新启动应用程序服务器”实际上会使用新数据更新应用程序。我需要能够从 cron 执行该功能。

以上是关于从 cron 重新启动弹性 beanstalk 应用程序服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何在弹性 beantalk 配置上运行 wget cron 命令

如何从 cli 本地连接到现有的弹性 beanstalk 实例?

在 Elastic Beanstalk 上的 docker 中的 cron 作业中访问 S3

如何让 NGINX 从 cron 作业重新启动/重新加载?

将 AMI 映像用于 Elastic Beanstalk

AWS 仅允许用户访问弹性 beanstalk 实例和存储