【问题标题】:Running composer command not woking in an EC2 AWS instance in user data script在用户数据脚本中的 EC2 AWS 实例中运行 composer 命令不起作用
【发布时间】:2021-02-01 04:12:21
【问题描述】:

有一个 shell 脚本在 Amazon Linux EC2 实例的引导脚本中部分工作(脚本作为实例启动之前设置的用户数据)。而且我仍然不知道为什么它作为引导脚本不起作用。

脚本执行以下操作:

  • 更新操作系统包
  • 安装 Apache2 网络服务器
  • 将网络服务器设置为在每次系统启动时启动
  • 使用亚马逊安装实用程序安装 PHP
  • 重启网络服务
  • 下载并安装 Composer
  • 使用 Composer 安装 WordPress

这是脚本:

#!/bin/bash

echo Bootstrap script starting at $(date) >> /home/ec2-user/log-bootstrap.txt
echo Updating OS and installing webserver at $(date) >> /home/ec2-user/log-bootstrap.txt
yum update -y
yum install httpd -y
chkconfig httpd on
service httpd start
echo Installing PHP at $(date) >> /home/ec2-user/log-bootstrap.txt
amazon-linux-extras install php7.4 -y
service httpd restart
echo Installing Composer at $(date) >> /home/ec2-user/log-bootstrap.txt
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer
echo The composer version is $(/usr/local/bin/composer --version) >> /home/ec2-user/log-bootstrap.txt
echo Installing Wordpress. Time: $(date) >> /home/ec2-user/log-bootstrap.txt
cd /var/www/html
/usr/local/bin/composer create-project johnpbloch/wordpress .

shutdown -P +5

目的是通过用户数据脚本在启动时完成机器中的所有操作。

脚本在 Composer 安装之前一直有效。但是echo The composer version is $(/usr/local/bin/composer --version) >> /home/ec2-user/log-bootstrap.txt 是第一行显示一些问题。它不执行$(/usr/local/bin/composer --version) 的部分。它将回声保存在文件中,但打印作曲家版本的位置仍然为空。

但进一步分析显示 Composer 已经安装成功。我可以从脚本中放入完全相同的剩余行,并且一切正常,但是当我通过 ssh 访问机器并执行剩余代码时。使用 composer 安装 WordPress 也可以。 Composer 仅在用户数据脚本中时才起作用。

我尝试通过两种方式模拟问题:

  1. 在机器上 ssh 登录后,在剪贴板中打印整个脚本并直接在终端中过去。

  2. 用这个确切的内容创建一个shell脚本文件,通过scp发送到机器并在机器内部执行。

在这两种情况下,脚本都能完美运行!并且我没有忘记在试验前更改为 sudo 以模拟机器执行引导脚本时更相似的东西。

有人知道如何在用户数据中的亚马逊机器的同一脚本中安装和运行composer吗?为什么 Composer 只有在来自 Amazon 实例的用户数据脚本中才能工作,尽管 Composer 已成功下载并且在通过 ssh 访问机器时仍然可以执行?

【问题讨论】:

    标签: php amazon-web-services composer-php


    【解决方案1】:

    作曲家需要export HOME=/root 设置。我对其进行了测试,它成功安装

    #!/bin/bash
    
    echo Bootstrap script starting at $(date) >> /home/ec2-user/log-bootstrap.txt
    echo Updating OS and installing webserver at $(date) >> /home/ec2-user/log-bootstrap.txt
    yum update -y
    yum install httpd -y
    chkconfig httpd on
    service httpd start
    echo Installing PHP at $(date) >> /home/ec2-user/log-bootstrap.txt
    amazon-linux-extras install php7.4 -y
    service httpd restart
    echo Installing Composer at $(date) >> /home/ec2-user/log-bootstrap.txt
    export HOME=/root
    curl -sS https://getcomposer.org/installer | php
    mv composer.phar /usr/local/bin/composer
    chmod +x /usr/local/bin/composer
    echo The composer version is $(/usr/local/bin/composer --version) >> /home/ec2-user/log-bootstrap.txt
    echo Installing Wordpress. Time: $(date) >> /home/ec2-user/log-bootstrap.txt
    cd /var/www/html
    /usr/local/bin/composer create-project johnpbloch/wordpress .
    
    shutdown -P +5
    

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 2020-09-29
      • 2016-10-14
      • 2018-11-11
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多