gpt4 book ai didi

linux - Bash:通过ssh启动远程python应用程序并获取其PID

转载 作者:IT王子 更新时间:2023-10-29 00:32:33 25 4
gpt4 key购买 nike

我正在创建一个小的 bash 脚本来将新文件从 windows 机器复制到远程 linux centos 服务器(我使用 git-shell 运行这个脚本)然后我想重新启动在服务器中运行的 python 应用程序使用这些新文件。

问题是,每次我运行这个脚本时,我都想在再次启动它之前结束实际运行的进程,所以我想获取我启动的进程的 pid 并将其保存到远程主机中的一个文件中,这样我下次我运行程序并终止它时可以从那里读取它。

我的代码现在看起来类似于:

echo "Copying code files to server..."
# The destination folder has to exist in the server
scp -r ./python/ root@myserver:/root/

echo "Checking for running processes..."

if ssh root@myserver 'ls dmr.pid >/dev/null'; then
echo "PID file exists, reading file..."
PID=$(ssh root@myserver 'cat dmr.pid')

# Terminate the actual process
echo "Terminating the process with PID '$PID'..."
ssh root@myserver 'kill $PID'
else
echo "PID file doesn't exist, not known processes running"
fi

# Restart the server and get the PID
echo "Restarting the server..."
ssh root@myserver 'python /root/python/run_dev_server.py > /dev/null 2>&1 &'

SERV_PID=$(ssh root@myserver 'echo $!')

echo "Saving PID to file dmr.pid"
ssh root@myserver "echo '$SERV_PID' > \"dmr.pid\""

echo "Sucesfully finished!"

重要的几行是:

ssh root@myserver 'python /root/python/run_dev_server.py > /dev/null 2>&1 &'
SERV_PID=$(ssh root@myserver 'echo $!')

此问题是脚本完成但文件最终为空以及 $SERV_PID 变量。

如果我不重定向输出而只是做这样的事情:

SERV_PID=$(ssh root@myserver 'python /root/python/run_dev_server.py & echo $!')

我在“重新启动服务器”后卡住了,从未获得 PID 或将包含它的文件,甚至是脚本的末尾。

但是如果我在控制台中正确运行它:

ssh root@myserver 'python /root/python/run_dev_server.py & echo $!'

我在终端上打印了一个 PID。

如有任何建议,我们将不胜感激。

最佳答案

ssh root@myserver 'python /root/python/run_dev_server.py > /dev/null 2>&1 &'
SERV_PID=$(ssh root@myserver 'echo $!')

使用上面的代码,您正在运行两个 ssh 命令,并且都创建了两个不同的 shell。问题是 echo $! 给出了来自 current shell 的最新后台进程 ID,但它没有。

也就是说,当您第二次 ssh 时,它是 shell,并且没有后台进程在其中运行,因此 echo $! 没有输出。这解释了为什么您的 PID 文件是空的。

相反,您可以做的是查找 python 脚本的所有实例并使用 killall 命令终止它们。或使用 ps 命令的类似想法。

关于linux - Bash:通过ssh启动远程python应用程序并获取其PID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13200965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com