shell脚本调用外部脚本的问题
写了两个脚本,姑且称为脚本1、2,1会调用2。2会启动一个jar包并在后台运行,然后ps取出jar包运行的pid,该脚本单独运行无异常。执行脚本1,1调用2,2启动jar...
写了两个脚本,姑且称为脚本1、2,1会调用2。2会启动一个jar包并在后台运行,然后ps取出jar包运行的pid,该脚本单独运行无异常。执行脚本1,1调用2,2启动jar包,输出pid,完毕。但是在命令行ps去找jar包运行的pid时,则发现找不到,jar包并没有运行。请教原因。有没有可能jar包运行了一瞬间就停止了呢?之后我在1调用2的命令后加了sleep 1,神奇的事情发生了,jar包启动无异常,怎么破????
展开
展开全部
估计是因为脚本1中使用了cd命令改变了当前路径,脚本2中继承了脚本1中的当前路径;而一旦脚本1结束回到主shell,这个当前路径也就不复存在。
如果在脚本2基于这个当前路径启动jar包前,脚本1结束了,那么当前路径肯定回到了主shell的设置去了,jar包就启动不了了。
任何外部调用的shell命令执行都会产生一个进程,都会有一个pid,即使最终执行是返回错误。
所以,两点建议:
1)脚本1调用2的命令行后加上 &,置入后台运行,这样就不会因为脚本1的结束而影响脚本2的运行。
2)脚本中尽量不要用cd命令跳转目录,尽量使用绝对路径。
如果在脚本2基于这个当前路径启动jar包前,脚本1结束了,那么当前路径肯定回到了主shell的设置去了,jar包就启动不了了。
任何外部调用的shell命令执行都会产生一个进程,都会有一个pid,即使最终执行是返回错误。
所以,两点建议:
1)脚本1调用2的命令行后加上 &,置入后台运行,这样就不会因为脚本1的结束而影响脚本2的运行。
2)脚本中尽量不要用cd命令跳转目录,尽量使用绝对路径。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询