取消从任何 shell 运行的后台脚本

取消从任何 shell 运行的后台脚本

我有一个通常在后台运行的脚本;它设置了我用于数据库连接的端口转发,同时开发了一个目前细节不相关的应用程序。因为我总是想让它运行,所以我将它设置为在新 shell 打开时启动 - 它会检查该端口是否正在使用,如果没有,则开始转发。

function forward {                                                                   
    if lsof -Pi :55433 -sTCP:LISTEN -t >/dev/null ; then
        echo "redirect already running"
    else
        target=$(~/environment-destination.sh staging)
        ~/forwarder.sh 55433 stuff.rds.amazonaws.com:5432 $target > /dev/null &
        echo "redirect running"                                                   
    fi                                                                           
}

我想要做的是让另一个在任何 shell 中运行的脚本能够停止此脚本并释放端口。(我之所以想要这样做,主要是因为我偶尔想设置转发到生产实例而不是暂存环境。)我尝试将保存到文件pidpkill在其上运行,但这不起作用 - 也pgrep找不到它。有没有更好的方法?

答案1

你应该创建一个如下的 shell 脚本:

function forward {                                                                   
    if lsof -Pi :55433 -sTCP:LISTEN -t >/dev/null ; then
        echo "redirect already running"
    else
        target=$(~/environment-destination.sh staging)
        ~/forwarder.sh 55433 stuff.rds.amazonaws.com:5432 $target > /dev/null &
        echo $! > /tmp/forward.pid
        echo "redirect running"                                                   
    fi                                                                           
}

然后通过以下方式终止你的转发kill $(cat /tmp/forward.pid)

相关内容