在后台运行多个脚本并立即返回

在后台运行多个脚本并立即返回

我将此 bash 设置配置为与 Wifi 管理器一起运行,该管理器提供 HOTSPOT、CONNECTING、CONNECTED 等事件

我想根据事件运行脚本并立即返回,而不是等待脚本完成,因为 Wifi 管理器会暂时暂停,直到脚本运行。

#!/bin/bash

Logfile="/home/arjun/Desktop/bash/logfile.txt"

echo "Started" >> $Logfile

if [ "$1" == "CONNECTING" ]; then
    echo "args CONNECTING" >> $Logfile

elif [ "$1" == "HOTSPOT" ]; then
    echo "args HOTSPOT" >> $Logfile
    kill $(< my_sinatra_server.pid)

elif [ "$1" == "CONNECTED" ]; then
    echo "args CONNECTED" >> $Logfile   

    nohup ~/Desktop/ruby/sinatra/api/api.rb >> /log/file 2>&1 &
    echo $! > my_sinatra_server.pid
    echo "PID is $(< my_sinatra_server.pid)"

else
    echo "Invalid args" >> $Logfile
fi

echo "bye:-)" >> $Logfile

我已经运行正常,但我还需要运行其他脚本,以及 Python 和 Nodejs 脚本。

我怎样才能添加这些呢?与nohupRuby类似吗?nohup为每个脚本添加一个新行?这些会导致交还控制权出现延迟吗?

如果我想将其委托给另一个可执行的 bash 文件,是否可以将所有这些nohup命令复制到新的 bash 文件并立即将控制权返回给 Wifi 管理器?这样会好很多吗?那我该怎么办呢?

答案1

它与 Ruby 的 nohup 类似吗?为每个脚本添加一个新的 nohup 行?这些会导致交还控制权出现延迟吗?

您建立的模式是nohup您将在后台使用命令&并将 PID 记录$!到文件中,这是您将看到用于此类工作的典型模式。

只需继续使用该模式和后台您想要以这种方式启动的所有进程,并将其 PID 记录到文件中即可。

如果我想将此委托给另一个可执行 bash 文件,是否只需将所有这些 nohup 命令复制到新的 bash 文件并立即将控制权返回给 Wifi 管理器即可?这样会好得多吗?那么我该怎么做呢?

是的,您可以将所有这些命令移至另一个脚本,然后只需通过一次调用即可调用它们。很难说这是好还是坏,这完全取决于您想要完成的任务以及您想要如何管理这些事情。

就如何做到这一点而言,您似乎已经知道该怎么做了。将所有内容放入脚本中并从 WiFi 管理器应用程序调用它。

您可能需要将一些参数传递到该脚本中。为此,您可以简单地使用对此脚本的调用,如下所示:

my_sub_cmd.bash $arg1 $arg2

$1然后在该命令中通过、$2等传递命令行参数。

相关内容