码迷,mamicode.com
首页 > 其他好文 > 详细

构建应用启动脚本的正确思路

时间:2019-03-27 21:35:38      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:文件头部   linux   ids   直接   存在   完成   修改   前置   文件   

 

linux 环境中,一般都使用 shell 脚本来做应用的启动控制。

在写脚本的时候,首先,先要确定在执行脚本之前,是不是需要做些什么准备工作。

第一步,假定是用 windows 系统作为开发机,那么如果是直接把 shell 脚本复制到 linux 机器上,那么就要首先使用 dos2unix 命令把 win 风格的 shell 文件转为 linux 风格的了。
dos2unix /path/to/*.sh

第二步,如果要记录日志,那么要给存放日志的文件夹递归地添加读写权限
chmod -R 664 /path/logs

第三步,要确定脚本是可执行文件,否则要添加上可执行权限
chmod +x /path/filename

到了这里,执行脚本的前置工作就已经完成了。虽然还没有开始写脚本。。。那就开始写脚本吧

第零步,在文件的最上面,表明文件需要用 bash 执行
#!/bin/bash

第一步,确定当前用户是否有相应应用的正确环境变量配置,如果没有,可以先在文件头部添加上
export NODE_ENV=‘/usr/local/bin‘
export PATH=$NODE_ENV:$PATH
这样来将应用的位置信息临时添加到环境变量中,便于后面直接使用 node 而不是使用完整路径启动路径
也可以首先添加到 /etc/profile 中,然后使用
source /etc/profile
确保环境变量的修改生效。

第二步,声明应用所在的文件夹,声明应用的入口文件
APP_HOME=/path/to/app_home
APP_MAIN=$APP_HOME"/app.js"

第三步,检查日志文件目录是否存在,不存在的话要新建
APP_LOG=/path/to/logPath
if [ ! -d $APP_LOG ]; then
  mkdir $APP_LOG
fi

第四步,检查应用是否已经启动
nodePids=0
nodePids=`ps -ef | grep "node $APP_MAIN" | grep -v grep | awk ‘{print $2}‘`

第五步,如果应用已经启动,就全都关掉
if [ $nodePids -ne 0 ]; then
  for id in $nodePids
    do
      kill -9 $id
    done
  if [ $? -ne 0 ]; then
    echo "kill $id fail"
    return 1
  fi
fi

第六步,启动应用
nohup node $APP_MAIN > $APP_LOG/nohup.log 2>&1 &

第七步,检查应用是否成功启动
pids=0
getPids(){
  pids=`ps -ef | grep "node $APP_MAIN" | grep -v grep | awk ‘{print $2}‘`
}
getPids
if [ $pids -ne 0 ]; then
  echo "app start success!"
fi

总结:启动一个应用,要考虑很多情况:脚本是否跨系统?脚本是否能执行?环境变量是否已经注册?日志文件夹是否有读写权限?应用是否已经启动过(会占据端口资源导致无法直接启动)?旧应用是否没有杀死?新应用是否真的启动起来了?这些全都考虑到了,才不会在上线时候遇到问题。

构建应用启动脚本的正确思路

标签:文件头部   linux   ids   直接   存在   完成   修改   前置   文件   

原文地址:https://www.cnblogs.com/lswit/p/10610283.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!