启动 Amazon EC2 实例时如何自动启动 Web 服务?
Posted
技术标签:
【中文标题】启动 Amazon EC2 实例时如何自动启动 Web 服务?【英文标题】:How to auto start web services when starting an Amazon EC2 instance? 【发布时间】:2011-07-15 19:51:54 【问题描述】:如何将httpd 和mysqld 服务设置为在启动amazon-ec2 实例时自动启动?
目前我必须通过 ssh 连接到实例并运行 sudo service httpd start
和 sudo service mysqld start
来手动启动它们。
【问题讨论】:
和 codedeploy-agent 一样 :) 【参考方案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)? @Jontiacat /etc/os-release
如果 VERSION_ID 为 2018.03 为 1。【参考方案3】:
如果您使用 Amazon Linux 2 AMI,您需要执行以下步骤:
-
在 AMI2 中,他们使用
systemctl
来管理服务检查它是否安装在您的机器上
2.systemctl list-units --type=service
通过此命令检查是否列出了tomcat.service
sudo systemctl enable tomcat.service
使 Tomcat 在启动时启动
systemctl is-enabled tomcat.service
检查tomcat是否可以在启动linux系统时启动
之后你可以重启你的linux系统,然后tomcat就会启动了。
更多关于systemctl
Click 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 并在启动时运行应用程序:
-
连接到 EC2 实例后,安装 NodeJS。遵循本教程:
https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-up-node-on-ec2-instance.html
使用本教程安装 httpd 服务器:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Tutorials.WebServerDB.CreateWebServer.html
我使用 Git Clone 将 ReactJS 应用程序克隆到 /home/ec2-user。
使用命令“npm install yarn -g”安装 Yarn
在克隆的项目中执行以下命令:“Yarn”,然后“Yarn build”
现在使用:cp -a /build/ 复制构建文件夹。 /var/www/html/
现在转到 /var/www/html/ 此处使用 vi 创建一个 .htaccess 文件并包含以下内容:“Options -MultiViews
重写引擎开启
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^ index.html [QSA,L]”
使用 :wq 保存文件
现在在 /etc/httpd/conf/httpd.conf 中搜索具有“/var/www/html”属性的目录并将“AllowOverride None”更改为“AllowOverride All”。现在打开浏览器并输入 http://ec2-ip 或 http://ec2-url 你会看到默认页面
在 AmazonLinux2 上输入命令“systemctl enable httpd”,然后输入“systemctl start httpd”。现在您可以在启动时访问该应用程序,而不是一次又一次地运行该应用程序。
你已经完成了。
【讨论】:
【参考方案7】:使用任何现有的 LAMP AMI,它们都将作为服务运行。
一个例子是BitNami,当你触发一个ec2实例时你会发现其他几个。
【讨论】:
用户专门询问如何在空白 AMI 上执行此操作,而不是如何启动预构建的 AMI。以上是关于启动 Amazon EC2 实例时如何自动启动 Web 服务?的主要内容,如果未能解决你的问题,请参考以下文章
在启动 Amazon EC2 Linux 实例时自动挂载 EBS 卷
如何在 .NET 中以编程方式启动 Amazon EC2 实例
使用用户指定的脚本重新启动现有 Amazon EC2 实例?