Bash脚本可在后台运行linux可执行文件

时间:2020-05-20 11:34:22

标签: linux bash

我是Linux环境的新手,试图编写少量服务,并希望通过单个shell脚本启动每个服务,但无法这样做。

我在应用程序的子文件夹下放置了几个Linux可执行文件。就像:

MainApp
  AppAFolder
    App-A
  AppBFolder
    App-B
startServices.sh

我想永远在后台运行子文件夹中的每个应用程序(即使在关闭主终端后也是如此)。

当我在Linux终端中分别尝试以下命令时,它将启动服务。

cd AppAFolder && chmod + x App-A && ./App-A&> / dev / null&disown

cd AppBFolder && chmod + x App-B && ./App-B&> / dev / null&disown

但是,当我在shell脚本中放置相同的命令并尝试执行时,似乎正在更改目录,并且第二项服务未运行。

#!/bin/bash
echo "Starting ServiceA. Currect dir is : $PWD"
ACmd="cd AppAFolder && chmod +x App-A && ./App-A &>/dev/null & disown"
$ACmd

echo "Starting ServiceB. Currect dir is : $PWD"
BCmd="cd AppBFolder && chmod +x App-B && ./App-B &>/dev/null & disown"
$BCmd

我收到错误消息“ ./startServices.sh:第12行:cd:AppBFolder:没有这样的文件或目录”。

我想在后台将新终端中的每个服务都弹出来并与主进程分离,以便它可以永远运行直到停止。

请让我知道我在这里想念的东西。

谢谢, Pooja

2 个答案:

答案 0 :(得分:2)

disown的手册页指出,您可以将nohup用于相同的目的。 我建议这样做,因为它更具体地影响哪个命令。您可以通过将cd命令分组在“ subshel​​l”下来使其仅影响某些命令。将所有这些放在一起会得出:

#!/bin/bash
echo "Starting ServiceA. Currect dir is : $PWD"
(cd AppAFolder && chmod +x App-A && nohup ./App-A &>/dev/null &)

echo "Starting ServiceB. Currect dir is : $PWD"
(cd AppBFolder && chmod +x App-B && nohup ./App-B &>/dev/null &)

答案 1 :(得分:0)

运行bash脚本时,第一个命令会将目录更改为AppAFolder。当您在bash脚本中运行第二个命令时,该命令仍位于AppAFolder中,并且该文件夹中不存在AppBfolder。您可能需要先上移文件夹,然后再运行第二个命令。