首页 > 解决方案 > 在后台运行 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: line 12: cd: AppBFolder: No such file or directory”。

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

请让我知道我在这里缺少什么。

谢谢,普加

标签: linuxbash

解决方案


手册页disown说您可以将nohup其用于相同目的。我建议这样做,因为它更具体地说明了哪个命令受到影响。您可以cd通过将命令分组在“子shell”下使命令仅影响某些命令。将所有这些放在一起产生:

#!/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 &)

推荐阅读