簡體   English   中英

Bash:通過ssh啟動遠程python應用程序並獲取其PID

[英]Bash: start remote python application through ssh and get its PID

我正在創建一個小的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 $! 給出當前 shell中最新的后台進程ID。

也就是說,當您第二次使用ssh時,它是新的 shell,並且沒有后台進程在其中運行,因此echo $! 沒有輸出。 這解釋了為什么您的PID文件為空。

相反,您可以做的是查找python腳本的所有實例,然后使用killall命令將其殺死。 或類似的想法使用ps命令。

多虧了Kingslndian,我通過執行一個命令完成了我所需的三個步驟,從而解決了這個問題,從而避免了在不同shell中運行的問題:

 ssh root@myserver 'python /root/python/run_dev_server.py > /dev/null 2>&1 & echo $! > "dmr.pid"'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM