<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[实践OK]Shell 脚本内的文件引用写法及两机房各抽一台机器出来隔15秒左右启动，可用在先后关停启动java进程上，实现对外持续服务。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Thu, 21 May 2020 02:08:57 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	Shell 也可以包含外部脚本， 可以封装一些公共的代码为单独文件，需要用的时候直接引用。<br/>方法有两种， 分别是.和source， 如下：<br/>1）我看在centos6.X里面的/etc/init.d/nginx就是用的点空格引入的。<br/><textarea name="code" class="php" rows="15" cols="100">
# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

</textarea><br/><br/><br/>2）无论是source还是点空格最好是用绝对路径：<br/>放在同一个目录下，所以source ./import.sh 引用看起来没有问题， 但是如果在上一层目录运行脚本时会出错，如下：<br/>$ sh shell_testing/test.sh<br/>shell_testing/test.sh: line 4: ./import.sh: No such file or directory<br/>实践如下，相当于shell去包含./import.sh是从运行目录去包含的，去了上层目录就认为./import.sh是在上一层目录下面，所以得用绝对路径：<br/><textarea name="code" class="php" rows="15" cols="100">
[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 &quot;Your name is $name&quot;
</textarea><br/><br/>所以引用的话最好使用绝对路径， 其实也就是test.sh脚本的绝对路径，因为这两个脚本放在同一个目录下。<br/>import.sh<br/><textarea name="code" class="C" rows="15" cols="100">
#!/bin/bash
name=&#039;LiLei&#039;
sleep 3
echo $name
echo &quot;EOF&quot;
</textarea><br/><br/>test.sh<br/><textarea name="code" class="php" rows="15" cols="100">
#!/bin/bash
source ./import.sh&nbsp;&nbsp; #无论是source还是点空格最好是用绝对路径

echo &quot;Your name is $name&quot;
</textarea><br/><br/>$./test.sh <br/>LiLei<br/>EOF<br/>Your name is LiLei<br/><br/>注意:<br/>1.两个点之间，有空格，千万注意.<br/>2.两个脚本不在同一目录，要用绝对路径<br/>3.为简单起见，通常用第一种方法<br/><br/>摘自链接：<a href="https://www.jianshu.com/p/cc4dda1fb77f" target="_blank">https://www.jianshu.com/p/cc4dda1fb77f</a><br/><br/><br/>在两个机房里这两个VIP下面有很多的服务，如果用ansible一次性给干死了，但是这个java的进程要启动得15秒，也就出现了集体同时在启动中，没有对外服务，怎么办？只有先后启动，这时就有用了，两个机房的一些机器15秒后启动，一些机器立即启动，错开启动的好处是，两个机房能同时对外提供服务：<br/>/data/www/ai.xxx.xxxx.com/server/start.sh<br/><textarea name="code" class="php" rows="15" cols="100">
#!/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 &gt;&gt; output.log 2&gt;&amp;1 &amp;
</textarea><br/><br/><br/>/data/www/ai.xxx.xxxx.com/server/stop.sh<br/><textarea name="code" class="php" rows="15" cols="100">
#!/bin/sh

PID=$(ps -ef &#124; grep eladmin-system &#124; grep -v grep &#124; awk &#039;&#123; print $2 &#125;&#039;)
if [ -z &quot;$PID&quot; ]
then
echo Application is already stopped
else
echo kill $PID
kill $PID
</textarea><br/><br/>延后启动的shell文件引用：<br/>/data/www/ai.xxx.xxxx.com/bin/delayRestart.sh<br/><textarea name="code" class="php" rows="15" cols="100">
#!/bin/sh
sleep 15
. /data/www/ai.xxx.xxxx.com//server/stop.sh
sleep 1
. /data/www/ai.xxx.xxxx.com//server/start.sh
</textarea><br/><br/>直接启动的shell文件无 sleep 15:<br/><textarea name="code" class="php" rows="15" cols="100">
#!/bin/sh
. /data/www/ai.xxx.xxxx.com//server/stop.sh
sleep 1
. /data/www/ai.xxx.xxxx.com//server/start.sh
</textarea><br/><br/><br/>还是相对路径问题，得修改这个jar包路径为绝对路径：<br/>/data/www/ai.xxx.xxxx.com/bin/output.log<br/>Error: Unable to access jarfile eladmin-system-3.1.jar<br/><br/><br/>实践成功部署如下：<br/>ansible ai_web -a&#039;ps -eo pid,lstart,etime,cmd &#124; grep eladmin-system&#124;grep -v grep&#039;&nbsp;&nbsp;<br/>10.73.234.136 &#124; CHANGED &#124; rc=0 &gt;&gt;&nbsp;&nbsp;<br/>24238 Thu May 21 14:21:03 2020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&nbsp;&nbsp;<br/>10.73.234.137 &#124; CHANGED &#124; rc=0 &gt;&gt;&nbsp;&nbsp;<br/>34282 Thu May 21 14:21:19 2020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&nbsp;&nbsp;<br/>10.169.70.72 &#124; CHANGED &#124; rc=0 &gt;&gt;&nbsp;&nbsp;<br/>52665 Thu May 21 14:21:19 2020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&nbsp;&nbsp;<br/>10.169.70.71 &#124; CHANGED &#124; rc=0 &gt;&gt;&nbsp;&nbsp;<br/>31033 Thu May 21 14:21:04 2020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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&nbsp;&nbsp;
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践OK]Shell 脚本内的文件引用写法及两机房各抽一台机器出来隔15秒左右启动，可用在先后关停启动java进程上，实现对外持续服务。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>