标题:[实践OK]Shell 脚本内的文件引用写法及两机房各抽一台机器出来隔15秒左右启动,可用在先后关停启动java进程上,实现对外持续服务。 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Thu, 21 May 2020 10:08:57 +0000 作者:jackxiang 地址:https://jackxiang.com/post/10558/ 内容: Shell 也可以包含外部脚本, 可以封装一些公共的代码为单独文件,需要用的时候直接引用。 方法有两种, 分别是.和source, 如下: 1)我看在centos6.X里面的/etc/init.d/nginx就是用的点空格引入的。 # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network 2)无论是source还是点空格最好是用绝对路径: 放在同一个目录下,所以source ./import.sh 引用看起来没有问题, 但是如果在上一层目录运行脚本时会出错,如下: $ sh shell_testing/test.sh shell_testing/test.sh: line 4: ./import.sh: No such file or directory 实践如下,相当于shell去包含./import.sh是从运行目录去包含的,去了上层目录就认为./import.sh是在上一层目录下面,所以得用绝对路径: [xiangdong@shell_test_server_bj_yz_192_168_0_1:/tmp] $sh /tmp/test.sh LiLei EOF Your name is LiLei [xiangdong@shell_test_server_bj_yz_192_168_0_1:/tmp] $cd .. [xiangdong@shell_test_server_bj_yz_192_168_0_1:/] $sh /tmp/test.sh /tmp/test.sh: line 2: ./import.sh: No such file or directory [xiangdong@shell_test_server_bj_yz_192_168_0_1:/] $cat /tmp/test.sh #!/bin/bash source ./import.sh echo "Your name is $name" 所以引用的话最好使用绝对路径, 其实也就是test.sh脚本的绝对路径,因为这两个脚本放在同一个目录下。 import.sh #!/bin/bash name='LiLei' sleep 3 echo $name echo "EOF" test.sh #!/bin/bash source ./import.sh #无论是source还是点空格最好是用绝对路径 echo "Your name is $name" $./test.sh LiLei EOF Your name is LiLei 注意: 1.两个点之间,有空格,千万注意. 2.两个脚本不在同一目录,要用绝对路径 3.为简单起见,通常用第一种方法 摘自链接:https://www.jianshu.com/p/cc4dda1fb77f 在两个机房里这两个VIP下面有很多的服务,如果用ansible一次性给干死了,但是这个java的进程要启动得15秒,也就出现了集体同时在启动中,没有对外服务,怎么办?只有先后启动,这时就有用了,两个机房的一些机器15秒后启动,一些机器立即启动,错开启动的好处是,两个机房能同时对外提供服务: /data/www/ai.xxx.xxxx.com/server/start.sh #!/bin/sh cd `dirname $0`; nohup java -jar -Xms1024m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=4096m eladmin-system-3.1.jar --spring.profiles.active=prod >> output.log 2>&1 & /data/www/ai.xxx.xxxx.com/server/stop.sh #!/bin/sh PID=$(ps -ef | grep eladmin-system | grep -v grep | awk '{ print $2 }') if [ -z "$PID" ] then echo Application is already stopped else echo kill $PID kill $PID 延后启动的shell文件引用: /data/www/ai.xxx.xxxx.com/bin/delayRestart.sh #!/bin/sh sleep 15 . /data/www/ai.xxx.xxxx.com//server/stop.sh sleep 1 . /data/www/ai.xxx.xxxx.com//server/start.sh 直接启动的shell文件无 sleep 15: #!/bin/sh . /data/www/ai.xxx.xxxx.com//server/stop.sh sleep 1 . /data/www/ai.xxx.xxxx.com//server/start.sh 还是相对路径问题,得修改这个jar包路径为绝对路径: /data/www/ai.xxx.xxxx.com/bin/output.log Error: Unable to access jarfile eladmin-system-3.1.jar 实践成功部署如下: ansible ai_web -a'ps -eo pid,lstart,etime,cmd | grep eladmin-system|grep -v grep' 10.73.234.136 | CHANGED | rc=0 >> 24238 Thu May 21 14:21:03 2020 02:28 java -jar -Xms1024m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=4096m /data/www/ai.xxx.xxxx.com/server/eladmin-system-3.1.jar --spring.profiles.active=prod 10.73.234.137 | CHANGED | rc=0 >> 34282 Thu May 21 14:21:19 2020 02:12 java -jar -Xms1024m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=4096m /data/www/ai.xxx.xxxx.com/server/eladmin-system-3.1.jar --spring.profiles.active=prod 10.169.70.72 | CHANGED | rc=0 >> 52665 Thu May 21 14:21:19 2020 02:12 java -jar -Xms1024m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=4096m /data/www/ai.xxx.xxxx.com/server/eladmin-system-3.1.jar --spring.profiles.active=prod 10.169.70.71 | CHANGED | rc=0 >> 31033 Thu May 21 14:21:04 2020 02:27 java -jar -Xms1024m -Xmx4096m -XX:MetaspaceSize=1024M -XX:MaxMetaspaceSize=4096m /data/www/ai.xxx.xxxx.com/server/eladmin-system-3.1.jar --spring.profiles.active=prod Generated by Jackxiang's Bo-blog 2.1.1 Release