当前位置: 首页 > 知识库问答 >
问题:

AWS弹性豆茎,运行一个cronjob

司徒胤
2023-03-14
container_commands:
  01cronjobs:
    command: echo "*/1 * * * * root php /etc/httpd/myscript.php"

有什么想法吗?

共有1个答案

邹京
2023-03-14

在应用程序的根目录中创建一个名为.ebExtensions的文件夹(如果它还不存在的话)。然后在.ebExtensions文件夹中创建一个配置文件。出于说明的目的,我将使用example.config。然后将其添加到example.config中

container_commands:
  01_some_cron_job:
    command: "cat .ebextensions/some_cron_job.txt > /etc/cron.d/some_cron_job && chmod 644 /etc/cron.d/some_cron_job"
    leader_only: true

这是弹性Beanstalk的YAML配置文件。请确保将其复制到文本编辑器中时,文本编辑器使用空格而不是制表符。否则,当您将其推送到EB时,将会得到一个YAML错误。

这样做的目的是创建一个名为01_some_cron_job的命令。命令是按字母顺序运行的,所以01确保它作为第一个命令运行。

# The newline at the end of this file is extremely important.  Cron won't run without it.
* * * * * root /usr/bin/php some-php-script-here > /dev/null

因此,这个cron作业将以root用户的身份每天每小时每分钟运行,并将输出丢弃到/dev/null。/usr/bin/php是PHP的路径。然后将这里的some-php-script-替换为php文件的路径。这显然是假设您的cron作业需要运行一个PHP文件。

此外,确保some_cron_job.txt文件在文件末尾有一个换行符,就像注释所说的那样。否则cron不会运行。

更新:当弹性Beanstalk扩展您的实例时,这个解决方案存在一个问题。例如,假设您有一个运行cron作业的实例。你会得到流量的增加,所以弹性Beanstalk可以将你扩展到两个实例。leader_only将确保只有一个cron作业在两个实例之间运行。你的流量减少,弹性豆茎将你缩小到一个实例。但弹性Beanstalk并没有终止第二个实例,而是终止了作为领导者的第一个实例。现在没有任何cron作业在运行,因为它们只在第一个被终止的实例上运行。请参阅下面的评论。

 类似资料:
  • 配置验证异常:AWS Elastic Beanstatk无法与Amazon EC2通信以确定是否为Elastic Load均衡创建自定义安全组。 在创建AWS Elastic Beanstalk应用程序时,我在尝试继续“查看和启动”时遇到了这个错误。我是新手。请帮忙。

  • 我是AWS的新手,这个问题似乎很基本。然而,我需要看看我是否能找到解决方案。 我首先创建并启动了一个 EC2 实例,然后创建了一个弹性 Beanstalk 实例,并在该实例上部署了一个示例应用程序。默认情况下,弹性 Beanstalk 会将“默认环境”附加到此实例,我无法将其更改为我的 EC2 实例。如何将我的 EC2 实例(我之前创建的实例)附加到此弹性豆茎实例?我正在使用亚马逊免费套餐来学习。

  • 我对亚马逊AWS服务非常陌生。我想知道是否有办法运行EC2的一个实例(比如Amazon Linux AMI ),然后将两个环境连接到这个实例。 特别是,我希望在单个EC2实例上运行PHP和Tomcat环境。 问题是,每次我在Elastic Beanstalk中创建新环境时,它似乎也会创建一个新的EC2实例。我是不是遗漏了什么? 我很感激任何关于此的提示。

  • 我使用WindowsPowerShell创建了一个弹性Beanstalk环境,并遵循以下部署文档将Django应用程序部署到弹性Beanstalk 我完成了以下步骤:使用Django的Python虚拟环境, 创建了django项目, 创建IAM用户我获得了访问密钥ID和机密访问密钥ID 失败此步骤环境并部署您的Django应用程序 当我尝试it询问访问密钥、秘密访问密钥和区域aws应用程序自动生成

  • 我可以用超文本传输协议浏览网站,但不能用https,我ChromeERR_CONNECTION_REFUSED。 我的环境是Nodejs(64bit AmazonLinux2015.09 v2.0)上的ExpresJS服务器,运行在Elastic Beanstalk上。我可以在端口80上telnet到EC2弹性公共IP,但在端口443上无法telnet,连接被拒绝。 设置 HTTPS 的步骤 >

  • 有人知道在弹性豆茎中传递一个秘密值作为环境变量是可能的吗?另一个选择显然是在我们的代码库中使用sdk,但我想先探讨环境变量方法 干杯Damien