我有一个通常在后台运行的脚本;它设置了我用于数据库连接的端口转发,同时开发了一个目前细节不相关的应用程序。因为我总是想让它运行,所以我将它设置为在新 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 中运行的脚本能够停止此脚本并释放端口。(我之所以想要这样做,主要是因为我偶尔想设置转发到生产实例而不是暂存环境。)我尝试将保存到文件pid
并pkill
在其上运行,但这不起作用 - 也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)