我有一个在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
"
)
请原谅我的格式。
答案 0 :(得分:2)
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 &
答案 1 :(得分:2)
如果进程仍在本地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
并不是那么重要。