本文以在CentOS中自动执行shell脚本为例,介绍如何通过弹性伸缩和脚本自动化部署应用。

背景信息

Linux系统中,共有7个启动级别:
  • 等级0:关机。
  • 等级1:单用户模式。
  • 等级2:无网络连接的多用户命令行模式。
  • 等级3:有网络连接的多用户命令行模式。
  • 等级4:不可用。
  • 等级5:带图形界面的多用户模式。
  • 等级6:重新启动。

在弹性伸缩自动创建ECS实例后,如您需要自动安装、更新程序和自动加载代码,可以在自定义镜像中存放执行脚本,并设置命令在操作系统启动后自动执行该脚本。然后在伸缩配置中使用该自定义镜像,自动创建ECS实例后即会自动执行脚本,完成自动化部署。

由于CentOS 6及以下系统采用system V init作为初始化进程,但CentOS 7采用了systemd作为初始化进程,两者的工作原理有较大差别。本文分别针对CentOS 6以及CentOS 7进行说明。

CentOS 6及以下系统自动执行脚本

本节演示如何在CentOS 6及以下系统自动执行脚本。

  1. 创建shell测试脚本。
    #!/bin/sh
    # chkconfig: 6 10 90
    # description: Test Service
    echo "hello world!"

    其中,6是默认启动级别,具体含义请参见背景信息。10是启动优先级,90是停止优先级,优先级范围是0-100,数字越大,优先级越低。

    说明 如您需要确保ECS实例上的任务处理完成才允许弹性伸缩释放该ECS实例,将脚本中的启动级别改为0即可。
  2. 将测试文件放在/etc/rc.d/init.d/目录下,然后执行chkconfig --level 6 test on,以后每次开机启动都会执行该测试脚本。
    说明 如您需要确保ECS实例上的任务处理完成才允许弹性伸缩释放该ECS实例,将脚本中的启动级别改为0即可,每次关机时都会执行该测试脚本。
例如,您可以通过脚本执行phpwind安装程序(数据库密码仍需要您自己输入),示例脚本如下,请根据实际情况修改。
cd /tmp
echo "phpwind"
yum install -y \
unzip \
wget \
httpd \
php \
php-fpm \
php-mysql \
php-mbstring \
php-xml \
php-gd \
php-pear \
php-devel
chkconfig php-fpm on \
&& chkconfig httpd on
wget http://pwfiles.oss-cn-hangzhou.aliyuncs.com/com/soft/phpwind_v9.0_utf8.zip \
&& unzip -d pw phpwind_v9.0_utf8.zip \
&& mv pw/phpwind_v9.0_utf8/upload/* /var/www/html \
&& wget http://ess.oss-cn-hangzhou.aliyuncs.com/ossupload_utf8.zip -O ossupload_utf8.zip \
&& unzip -d ossupload ossupload_utf8.zip \
&& /bin/cp -rf ossupload/ossupload_utf8/* /var/www/html/src/extensions/ \
&& chown -R apache:apache /var/www/html
service httpd start && service php-fpm start
echo "安装云监控"
wget http://update2.aegis.aliyun.com/download/quartz_install.sh
chmod +x quartz_install.sh
bash quartz_install.sh
echo "安装完成"

CentOS 7系统自动化部署应用

本节演示如何在CentOS 7系统自动执行脚本。按照以下步骤,使用systemd时,在系统关闭状态仍能运行脚本。

  1. 创建需要运行的脚本。
  2. /etc/systemd/system下创建一个文件run-script-when-shutdown.service
    请把ExecStop变量的值,修改为您需要运行脚本的绝对路径:
    [Unit]
    Description=service to run script when shutdown
    After=syslog.target network.target
    
    [Service]
    Type=simple
    ExecStart=/bin/true
    ExecStop=/path/to/script/to/run
    RemainAfterExit=yes
    
    [Install]
    WantedBy=default.target
  3. 执行命令启动新创建的服务。
    systemctl enable run-script-when-shutdown
    systemctl start run-script-when-shutdown
    说明
    • 您可以配置run-script-when-shutdown运行固定的脚本,并在需要时修改更换该脚本,使其更加灵活实用。
    • 无需运行上述服务时,执行systemctl disable run-script-when-shutdown