weixin_43975295 2019-12-13 13:45 采纳率: 100%
浏览 1582
已采纳

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换成其他的命令试试,检查下权限 环境变量 绝对路径相关的问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵