【问题标题】:How to auto start web services when starting an Amazon EC2 instance?启动 Amazon EC2 实例时如何自动启动 Web 服务?
【发布时间】:2011-07-15 19:51:54
【问题描述】:

如何将 服务设置为在启动 实例时自动启动?

目前我必须通过 ssh 连接到实例并运行 sudo service httpd startsudo service mysqld start 来手动启动它们。

【问题讨论】:

  • 和 codedeploy-agent 一样 :)

标签: httpd mysqld amazon-ec2 apache web-services amazon-ec2


【解决方案1】:

您可以在 Amazon Linux EC2 实例上发出以下命令,而不是从新 AMI 开始...

sudo chkconfig mysqld on
sudo chkconfig httpd on

您可以使用以下命令检查启用这些服务以在启动时启动之前和之后的设置...

sudo chkconfig --list mysqld
sudo chkconfig --list httpd

仅使用...查看所有服务

sudo chkconfig --list

注意如果您在 chkconfig 在 root 路径中遇到任何问题,您可以尝试像这样指定完整路径...

sudo /sbin/chkconfig mysqld on
sudo /sbin/chkconfig httpd on

【讨论】:

  • 担心 sqld 因内存不足而被关闭,但添加交换文件后仍无法启动。 Tuns out 我只是没有启用该服务。呵呵。非常感谢!像魅力一样工作
  • +1 仍然完全相关/必需,但我建议先检查设置,然后再尝试启用服务 - 只是为了安全起见。
  • 甚至,@yoshinorin 的回复中提到,对于 Amazon Linnux 2 来说,sudo systemctl disable <name> 更好
【解决方案2】:

Amazon Linux 1 和 Amazon Linux 2 是不同的。

亚马逊 Linux 1

在 AmazonLinux1 中,使用 chkconfig 命令。

$ sudo chkconfig mysqld on
$ sudo chkconfig httpd on

亚马逊 Linux2

在 AmazonLinux2 中,引入了 systemd。所以,chkconfig 是旧命令。你应该使用systemctl。这是systemd的控制命令。

$ sudo systemctl enable mysqld
$ sudo systemctl enable httpd

您可以通过is-enabled 命令确认它是否启用。

$ sudo systemctl is-enabled mysqld
enabled

chkconfig 命令请求将被转发到systemctl

$ chkconfig mysqld on
Note: Forwarding request to 'systemctl enable mysqld.service'.

【讨论】:

  • 有没有办法从 EC2 实例类型列表中判断它们具有哪种 Linux 风格(1 或 2)?
  • @Jontia cat /etc/os-release 如果 VERSION_ID 为 2018.03 为 1。
【解决方案3】:

如果您使用 Amazon Linux 2 AMI,您需要执行以下步骤:

  1. 在 AMI2 中,他们使用systemctl 来管理服务检查它是否安装在您的机器上 2.systemctl list-units --type=service通过此命令检查是否列出了tomcat.service
  2. sudo systemctl enable tomcat.service 使 Tomcat 在启动时启动
  3. systemctl is-enabled tomcat.service 检查tomcat是否可以在启动linux系统时启动

之后你可以重启你的linux系统,然后tomcat就会启动了。

更多关于systemctlClick Here

【讨论】:

    【解决方案4】:

    我的一个客户想要做这个任务,我已经通过以下方式成功地完成了。

    以下命令在实例启动时自动启动服务。

    自动启动 apache/httpd

    1) systemctl enable httpd
    

    自动启动redis服务

    2) systemctl enable redis
    

    我已将 SELINUX 设置为禁用

    3) /etc/sysconfig/selinux
    

    对于 mysql 服务

    sudo chkconfig mysqld on
    sudo chkconfig httpd on
    

    【讨论】:

    • 您能解释一下每个命令的含义吗?例子。什么是 systemctl 、 chkconfig 等。
    【解决方案5】:

    我遇到了类似的问题,这是我建议的解决方案, 您需要在 /etc/init.d 目录下创建一个文件,例如名称为 tomcat,并根据您的系统安装更改 JAVA_HOME 和 CATALINA_HOME 参数。 设置好此文件后,运行以下命令:

    sudo chkconfig <file-name> on
    

    您在 /etc/init.d 中创建的文件在哪里,在我的例子中是 tomcat。

    [ec2-user@ip-<myip> init.d]$ cat tomcat
    #!/bin/bash
    # description: Tomcat Start Stop Restart
    # processname: tomcat
    # chkconfig: 234 20 80
    JAVA_HOME=/opt/apache-tomcat-7.0.96
    export $JAVA_HOME
    PATH=$JAVA_HOME/bin:$PATH
    export PATH
    CATALINA_HOME=/opt/apache-tomcat-7.0.96
    
    case $1 in
    start)
    sh $CATALINA_HOME/bin/startup.sh
    ;;
    stop)
    sh $CATALINA_HOME/bin/shutdown.sh
    ;;
    restart)
    sh $CATALINA_HOME/bin/shutdown.sh
    sh $CATALINA_HOME/bin/startup.sh
    ;;
    esac
    exit 0
    chmod 755 tomcat
    chkconfig --add tomcat
    chkconfig --level 234 tomcat on
    chkconfig --list tomcat
    service tomcat start
    

    【讨论】:

      【解决方案6】:

      Amazon Linux2 上的 ReactJS 进程: 在 EC2 上安装 ReactJS 并在启动时运行应用程序:

      1. 连接到 EC2 实例后,安装 NodeJS。遵循本教程: https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html
      2. 使用本教程安装 httpd 服务器:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateWebServer.html
      3. 我使用 Git Clone 将 ReactJS 应用程序克隆到 /home/ec2-user。
      4. 使用命令“npm install yarn -g”安装 Yarn
      5. 在克隆的项目中执行以下命令:“Yarn”,然后“Yarn build”
      6. 现在使用:cp -a /build/ 复制构建文件夹。 /var/www/html/
      7. 现在转到 /var/www/html/ 此处使用 vi 创建一个 .htaccess 文件并包含以下内容:“Options -MultiViews 重写引擎开启 RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.html [QSA,L]” 使用 :wq 保存文件
      8. 现在在 /etc/httpd/conf/httpd.conf 中搜索具有“/var/www/html”属性的目录并将“AllowOverride None”更改为“AllowOverride All”。现在打开浏览器并输入 http://ec2-ip 或 http://ec2-url 你会看到默认页面
      9. 在 AmazonLinux2 上输入命令“systemctl enable httpd”,然后输入“systemctl start httpd”。现在您可以在启动时访问该应用程序,而不是一次又一次地运行该应用程序。 你已经完成了。

      【讨论】:

        【解决方案7】:

        使用任何现有的 LAMP AMI,它们都将作为服务运行。

        一个例子是BitNami,当你触发一个ec2实例时你会发现其他几个。

        【讨论】:

        • 用户专门询问如何在空白 AMI 上执行此操作,而不是如何启动预构建的 AMI。