weixin_43975295
2019-12-13 13:45
采纳率: 100%
浏览 1.4k

shell脚本调用另一个shell脚本问题

问题描述:
现在有两个shell脚本A和B,用A脚本去调用B脚本,B脚本中有一条将程序放到后台执行的语句。两脚本大体内容如下:
A脚本:
#!/bin/bash
source /etc/profile
source ~/.bash_profile
B

B脚本:
#!/bin/bash
source /etc/profile
source ~/.bash_profile
nohup command &

这时候执行A脚本,发现虽然成功调用了B脚本,并且看到了B脚本中的程序放到后台的回显,但是此时查看发现后台并没有command程序。
个人感觉可能是A脚本fork出子进程,然后B脚本的后台command程序是放在子进程中的,之后A脚本及其子进程退出,后台的程序也一并退出了。
其后我使用了source B来调用B脚本,以及在B脚本最后写入sleep命令,即程序放到后台后B脚本并不退出,但是同样的结果,还是发现command程序没有启动。
请问有没有大佬知道这种情况的原因和解决办法呢?需要这样做的原因是A脚本是一个监控脚本,发现异常以后,去调用执行B脚本,而B脚本是command程序的启动脚本。如果将nohup command &放入A脚本中去启动,而不是通过调用B脚本的方式启动command程序可以行,但是感觉管理混乱,并且想弄明白这个问题的原因。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • rpmdeb 2019-12-13 14:05
    已采纳

    按说这样写是没有问题的,你可以在 nohup 这句的前后 加个 echo ,调试下,看能不能正常执行,把command换成其他的命令试试,检查下权限 环境变量 绝对路径相关的问题。

    已采纳该答案
    打赏 评论
  • 小飞要加油啊 2019-12-13 17:32

    为什么A和B 里面有重复的代码 完全可以去掉重复的代码,A 调B 去运行用该是没问题的。这个后台进程没启动起来 是不是因为权限的原因或者是B 脚本权限的云因呢?

    打赏 评论

相关推荐 更多相似问题