Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在后台运行linux可执行文件的Bash脚本_Linux_Bash - Fatal编程技术网

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

在后台运行linux可执行文件的Bash脚本,linux,bash,Linux,Bash,我是linux环境的新手,尝试编写一些服务,希望通过单个shell脚本启动它们,但无法这样做 我在应用程序的子文件夹下几乎没有linux可执行文件。就像: MainApp AppAFolder App-A AppBFolder App-B startServices.sh 我想永远运行后台子文件夹中的每个应用程序(即使在主终端关闭之后) 当我在Linux终端中分别尝试以下命令时,它会启动服务 cd AppAFolder&&chmod+x App-A&&./App-A&>

我是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:没有这样的文件或目录”

我想在后台spwan新终端中的每个服务,并从主进程中分离出来,这样它就可以永远运行,直到停止为止

请让我知道我错过了什么

谢谢,
Pooja

运行bash脚本时,第一个命令将目录更改为appapfolder。在bash脚本中运行第二个命令时,它仍在appa文件夹中,而AppBfolder不在该文件夹中。在运行第二个命令之前,可能需要先向上移动文件夹

运行bash脚本时,第一个命令将目录更改为AppAFolder。在bash脚本中运行第二个命令时,它仍在appa文件夹中,而AppBfolder不在该文件夹中。在运行第二个命令之前,可能需要先向上移动文件夹

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

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

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

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


是否在执行$Acmd之后必须将cd放回start目录?不要忘记使用nohup启动命令。否则,进程将在终端关闭后终止。是否确实需要使用cd?你不能简单地使用
chmod+x./appfolder/App-A&&./appfolder/App-A&>/dev/null&disown
?@Aserre,我试过了。但是,每个服务都尝试使用当前工作目录中的相对路径访问文件,因此,这样做将无法加载这些文件并产生错误。是否在执行$Acmd之后必须将cd放回起始目录?并且不要忘记使用nohup启动命令。否则,进程将在终端关闭后终止。是否确实需要使用cd?你不能简单地使用
chmod+x./appfolder/App-A&&./appfolder/App-A&>/dev/null&disown
?@Aserre,我试过了。但是,每个服务都试图使用当前工作目录中的相对路径访问文件,因此,这样做将无法加载这些文件并产生错误。我同意这是答案,但是
command&disown$比nohup好,因为它不会留下nohup.out文件。我还使用了双重分叉来实现同样的效果:
(command&)&
同意。但是OP已经重定向了stderr和stdout,这阻止了nohup.out积垢。所以我们很好!谢谢@EricBolinger。这是我的建议。在linux中是否有停止服务的命令?我正在使用停止进程来停止windows。我检查了一下,发现killall[SERVICE_NAME]停止后台进程变得很棘手——这取决于操作系统和shell。找到其他关于它的帖子,比如:@pooja处理这个问题的现代方法是使用systemd单位文件。这些也可以作为用户服务运行。也许这就足够让你开始了:我同意这是答案,但是
command&disown$比nohup好,因为它不会留下nohup.out文件。我还使用了双重分叉来实现同样的效果:
(command&)&
同意。但是OP已经重定向了stderr和stdout,这阻止了nohup.out积垢。所以我们很好!谢谢@EricBolinger。这是我的建议。在linux中是否有停止服务的命令?我正在使用停止进程来停止windows。我检查了一下,发现killall[SERVICE_NAME]停止后台进程变得很棘手——这取决于操作系统和shell。找到其他关于它的帖子,比如:@pooja处理这个问题的现代方法是使用systemd单位文件。这些也可以作为用户服务运行。也许这足以让你开始: