Elastic Beanstalk cron 和部署权限

Posted

技术标签:

【中文标题】Elastic Beanstalk cron 和部署权限【英文标题】:Elastic Beanstalk cron and deployment permissions 【发布时间】:2013-08-13 14:37:44 【问题描述】:

在部署到 AWS Elastic Beanstalk 期间,我想做两件事:

    获取一个包含 cron 条目的文件并将该文件放在 /etc/cron.d/ 中 更改包含在单个目录中的 shell 脚本的文件权限,以便它们可以由 cron 执行

在我的 .ebextensions 文件夹中,我有以下内容:

container_commands:
  00fix_script_permissions:
    command: "chmod u+x /var/app/current/scripts/*"
  01setup_cron:
    command: "cat .ebextensions/propel_mis_crons.txt > /etc/cron.d/propel_mis_crons && chmod 644 /etc/cron.d/propel_mis_crons"
    leader_only: true

.ebextensions 文件夹中的 propel_mis_crons.txt 有:

# m h  dom mon dow   command
MAILTO="dev@23sparks.com"
* * * * * root /var/app/current/scripts/current_time.sh

我检查了部署日志,可以看到以下内容:

2013-08-09 14:27:13,633 [DEBUG] Running command 00fix_permissions_dirs
2013-08-09 14:27:13,633 [DEBUG] Generating defaults for command 00fix_permissions_dirs
<<< 
2013-08-09 14:27:13,736 [DEBUG] No test for command 00fix_permissions_dirs
2013-08-09 14:27:13,752 [INFO] Command 00fix_permissions_dirs succeeded
2013-08-09 14:27:13,753 [DEBUG] Command 00fix_permissions_dirs output: 
2013-08-09 14:27:13,753 [DEBUG] Running command 01setup_cron
2013-08-09 14:27:13,753 [DEBUG] Generating defaults for command 01setup_cron
<<<
2013-08-09 14:27:13,829 [DEBUG] Running test for command 01setup_cron
2013-08-09 14:27:13,846 [DEBUG] Test command output: 
2013-08-09 14:27:13,847 [DEBUG] Test for command 01setup_cron passed
2013-08-09 14:27:13,871 [INFO] Command 01setup_cron succeeded
2013-08-09 14:27:13,872 [DEBUG] Command 01setup_cron output:

但是在部署时,脚本目录中所有文件的权限设置不正确,cron 无法运行。我不确定 cron 未运行是否由于权限问题而未运行,或者是否有其他原因阻止了这种情况。这是在 php5.4 64 位 Amazon Linux 实例上运行的。

希望能在这方面提供一些帮助。随着时间的推移,很有可能会添加由 cron 触发的新 shell 脚本。

【问题讨论】:

【参考方案1】:

@Ed 似乎是正确的,他建议对 ondeck 文件而不是 current 文件进行 chmod。

此外,这是我通过弹性 beanstalk .config 文件设置我的 cron 作业的方式。这当然可能不是最好的方式,但它适用于我的应用程序。

`"files":
    "/home/ec2-user/cronjobs.txt":
        "mode":"000777",
        "owner":"ec2-user",
        "group":"ec2-user",
        "source":"https://s3.amazonaws.com/xxxxxxxxxx/cronjobs.txt"
    

"container_commands":
    "01-setupcron":
     "command": "crontab /home/ec2-user/cronjobs.txt -u ec2-user",
     "leader_only": true
    ,`

首先,我拉入一个 cronjobs 文本文件并将其保存在 ec2-user 文件夹中。接下来,在 container_commands 中,我将该文件应用到 crontab。

同样,我不是专家,但这是我能想到的最好的方法,而且对我们来说效果很好。

【讨论】:

【参考方案2】:
container_commands:
00_fix_script_permissions:
command: "chmod u+x /opt/python/ondeck/app/scripts/*"

我是 Linux 和 AWS 菜鸟,但我发现按照上述方式修改您的命令对于我的用例确实成功。

/opt/python/current/app/scripts/createadmin 现在拥有用户的执行权限

【讨论】:

你救了我!关键是编辑 .../ondeck/... 文件,而不是 .../current/... 一个!谢谢

以上是关于Elastic Beanstalk cron 和部署权限的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk CRON 作业设置

Aws Elastic Beanstalk 不执行 cron.yaml 文件

AWS Elastic Beanstalk 中的 Cron 来触发 js 文件

在 Elastic Beanstalk 中运行 cron 作业

Elastic Beanstalk 未调度 cron.yaml 中定义的作业

您如何使用 Elastic Beanstalk 和 Java 使用 cron 作业?