[英]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.