簡體   English   中英

通過Bash腳本遠程執行和放棄進程?

[英]Execute and Disown Process Remotely Through a Bash Script?

我有一個在Raspberry Pi上執行的Python程序,但是我通過SSH執行它。 我想編寫一個簡單的Bash腳本,該腳本允許我雙擊它並執行啟動,其中包括:SSH進入Pi,cd進入目錄,執行python文件並發送到后台,然后使用disown -h作為能夠使其運行而無需依賴於保持SSH連接正常。 我使用sshpass是為了簡化操作,這是我到目前為止所擁有的,但是在運行它時,終端會凍結,進程會運行,但是,我知道我的程序無法啟動。 我嘗試過的事情出了什么問題以及如何實現自己的目標?

#!/bin/bash

$(
sshpass -p [MyPass] ssh pi@[MyIP]
"
cd Documents/MyProgram/;
python3 myFile.py &;
disown -h
"
)

請原諒我的格式,這是為了清楚起見。

sshpass可能會掛起密碼驗證。 最安全的方法是使用ssh-copy-id將私鑰復制到遠程主機,然后使用普通的ssh命令。對於不通過ssh登錄的密碼:

ssh-keygen
ssh-copy-id user@host

然后只需使用ssh

ssh user@host "nohup python3 myFile.py 2>&1 > /dev/null &;exit;"

你可以用nohup

nohup python3 myFile.py 2>&1 > /dev/null &

如果進程仍在本地TTY上具有句柄,則無法有效地放棄該進程。 使用重定向來防止它們:

ssh pi@"$myIP" bash -s <<'EOF'
  cd Documents/MyProgram/ || exit
  python3 myFile.py </dev/null >/dev/null 2>&1 &
  disown -h
EOF

重定向到文件也同樣有效-目標是覆蓋SSH會話的每個stdin,stdout和stderr上的句柄; /dev/null不是那么重要。

暫無
暫無

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

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