ansible执行带有环境变量的脚本不生效
1. 背景
jenkins发布时,使用ansible执行远程主机上的启动tomcat脚本发现不生效,启动tomcat的脚本中有环境变量。
ansible主机为:172.16.35.8
tomcat服务器为:172.16.35.56
tomcat启动脚本如下:
[app@cecntos jenkins]$ cat tomcat_start.sh
#!/bin/bash 4export CATALINA_YCLOANS_BASE CATALINA_YCLOANS_HOME TOMCAT_YCLOANS_HOME
5export JAVA_HOME=/usr/local/java/jdk1..0_45
6export PATH=$JAVA_HOME/bin:$PATH
7export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar #.启动tomcat
11echo "setup01:启动tomcat"
12cd /usr/local/tomcat/bin/ && ./startup.sh
13Process=`ps -ef |grep '/usr/local/tomcat' |grep -v grep|awk '{print $2}'|wc -l`
14sleep if [ "$Process" -eq "" ];then
echo " 启动tomcat失败!"
exit
18else
echo " 启动tomcat完成!"
20fi
3. 现象
在tomcat服务器执行脚本无问题,可以正常启动。
启动
[app@cecntos jenkins]$ ps -ef|grep tomcat
2app : pts/ :: grep tomcat
[app@cecntos jenkins]$
[app@cecntos jenkins]$ sh tomcat_start.sh
5setup01:启动tomcat
6Using CATALINA_CMIS_BASE: /usr/local/tomcat
7Using CATALINA_CMIS_HOME: /usr/local/tomcat
8Using CATALINA_TMPDIR: /usr/local/tomcat/temp
9Using JRE_HOME: /usr/local/java/jdk1..0_45/jre
10Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar: /usr/local/tomcat/bin/tomcat-juli.jar
11Tomcat started.
启动tomcat完成!
在tomcat服务器查看状态正常;
[app@cecntos jenkins]$ ps -ef|grep tomcat
2app : pts/ :: /usr/local/java/jdk1..0_45/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.rmi.server.hostname=172.16..xx -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port= -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xms512m -Xmx2048m -XX:PermSize=1024M -XX:MaxNewSize=512m -XX:MaxPermSize=512m -XX:ParallelGCThreads= -XX:+UseConcMarkSweepGC -Xloggc:./gc.log -XX:+UseConcMarkSweepGC -Xloggc:./gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./dump.core -Djava.endorsed.dirs=/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
3app : pts/ :: grep tomcat
在tomcat服务器停止后去ansible主机执行启动脚本;
[app@cecntos jenkins]$ ps -ef |grep 'tomcat' |grep -v grep|awk '{print $2}'|xargs kill -
[app@cecntos jenkins]$ ps -ef|grep tomcat
3app : pts/ :: grep tomcat
在ansible主机执行tomcat启动脚本;
[jenkins@VMcentos ~]$ sudo ansible 172.16.35.56 -u app -m shell -a 'sh /home/app/jenkins/tomcat_start.sh'
2172.16.35.56 | SUCCESS | rc= >>
3setup01:启动tomcat
4Tomcat started.
启动tomcat完成!
显示启动成功,但是查看却没有进程;
[app@cecntos jenkins]$ ps -ef|grep tomcat
2app : pts/ :: grep tomcat
[app@cecntos jenkins]$
4. 解决方法
在ansible执行启动脚本时,加一个“nohup”参数就可以解决
sh "sudo ansible ${serverIP} -u ${serverName} -m shell -a 'nohup sh ${cmisonlineShellName}'"
[jenkins@VM_131_4_centos ~]$ sudo ansible 172.16.35.56 -u app -m shell -a 'nohup sh /home/app/jenkins/tomcat_start.sh'
2172.16.35.56 | SUCCESS | rc= >>
3setup01:启动tomcat
4Tomcat started.
启动tomcat完成!
查看;
[app@cecntos jenkins]$ ps -ef|grep tomcat
2app : pts/ :: /usr/local/java/jdk1..0_45/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.rmi.server.hostname=172.16..xx -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port= -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Xms512m -Xmx2048m -XX:PermSize=1024M -XX:MaxNewSize=512m -XX:MaxPermSize=512m -XX:ParallelGCThreads= -XX:+UseConcMarkSweepGC -Xloggc:./gc.log -XX:+UseConcMarkSweepGC -Xloggc:./gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./dump.core -Djava.endorsed.dirs=/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
3app : pts/ :: grep tomcat
5. 原因
ansible执命令,默认不加载环境变量,nohup参数让脚本在后台执行,就可以加载里面的环境变量。
ansible执行带有环境变量的脚本不生效的更多相关文章
- windows上自动设置java环境变量的脚本
近期打算学习安卓开发,于是乎要准备java开发环境,安装好jdk后,就要设置java环境变量,java环境变量要设置JAVA_HOME,Path,CLASSPATH三个值,每次配置查百度复制粘贴都很麻 ...
- 【转】windows上自动设置java环境变量的脚本
转载:http://www.cnblogs.com/flowwind/p/4066146.html 近期打算学习安卓开发,于是乎要准备java开发环境,安装好jdk后,就要 设置java环境变量,ja ...
- Oracle环境变量设置脚本
每次都傻乎乎的往bashrc里面写环境变量,感觉不任性.于是,看了本书了解了/etc/oratab这个东东后,参考着书也写了一个设置Oracle环境变量的脚本. 在/etc/下创建oraset,权限设 ...
- linux上Kettle定时执行(转换的单步执行,job的单步执行,环境变量,kettle定时功能,效率问题等)转自(http://blog.csdn.net/feng19821209/article/details/5800960)
1,Kettle跨平台使用. 例如:在AIX下(AIX是IBM商用UNIX操作系统,此处在LINUX/UNIX同样适用),运行Kettle的相关步骤如下: 1)进入到Kettle部署的路径 ...
- JAVA环境变量的脚本
简单的一个脚本,用于自动设置环境变量.把代码拷贝,另存为javaEnv.bat.安装完Java 2 SDK之后,开一个命令行窗口,输入javaEnv java2SDKDir(java2SDKDir是你 ...
- Windwos Java‘bat 环境变量配置脚本
@echo off echo 正在设置Java环境变量 pause wmic ENVIRONMENT create name="JAVA_HOME",username=" ...
- Windows.命令行(CMD)_执行命令&环境变量
1.CMD命令中如果 命令有换行的话,就使用 ^来连接(这就类似于 Linux命令行中 \ 的作用) 2.环境变量 2.1.显示 所有环境变量的值,命令:set 2.2.显示 某个环境变量的值,命令 ...
- JAVA 修改环境变量不重启电脑生效方法
1. 在安装JDK1.6(高版本)时(本机先安装jdk1.6再安装的jdk1.5),自动将java.exe.javaw.exe.javaws.exe三个可执行文件复制到了C:\Windows\Sys ...
- java环境变量修改后不生效
修改java环境变量后,cmd查看java版本,还是之前的版本,需要做以下处理: 1. 删除C:\Windows\System32目录下的相关的java.exe.javaw.exe.javaws.ex ...
随机推荐
- Day 10 面向对象基础
目录 面对过程编程 面向对象编程 类 定义类 对象 定义对象 定制对象独有特征 面对过程编程 分析解决问题所需要的步骤, 用函数将这些步骤一步一步实现, 使用的时候一个个调用就可以了 优点: 复杂的问 ...
- 【全栈修炼】OAuth2 修炼宝典
一.OAuth 概念 开放授权(OAuth)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. -- 维基百 ...
- 【Web技术】276- WebView缓存原理分析和应用
前言 混合式开发,在产品体验以及页面加载速度的体验上已经非比以往的.今日早读文章由@unclechen分享. 正文从这开始- 一.背景 现在的App开发,或多或少都会用到Hybrid模式,到了WebV ...
- 各大中间件底层技术-分布式一致性协议 Raft 详解
前言 正式介绍 Raft 协议之前,我们先来举个职场产研团队的一个例子
- Asp.Net WebApi一个简单的Token验证
1.前言: WebAPI主要开放数据给手机APP,Pad,其他需要得知数据的系统,或者软件应用.Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能.我上次写的<Asp.Net MV ...
- PHP 7.4.0发布!一起看看有哪些新特性
PHP 7.4.0 发布了,此版本标志着 PHP 7 系列的第四次特性更新. 看了英文手册后,发现其进行了许多改进,并带来了一些新特性,现在将这些新特性您: 1.Typed Properties 类型 ...
- 【Eureka】集群搭建
[Eureka]集群搭建 转载============================================== ====================================== ...
- 【Git】学习开始
[Git]学习开始 转载:https://www.cnblogs.com/yangchongxing/p/10172683.html 在线电子书籍:https://git-scm.com/book/z ...
- python学习-文件创建读取
# 文件创建 # 读写# 文件存在?不存在?在操作系统上# 读 read r 写 write w# 打开一个文件# fs = open("xiaojian.txt",encodin ...
- SoC的软件开发流程,主要包含一些Linux下的操作命令
该笔记主要记录SoC的软件开发流程,主要包含一些Linux下的操作命令 1. 编写design file .c .h 2. 编写makefile 可执行文件名,交叉编译环境,compile fl ...