我需要为远程服务器上的后台监控任务运行无限bash循环。我正在使用python Paramiko 进行此项工作并运行以下命令:
s = paramiko.SSHClient()
s.load_system_host_keys()
s.connect(hostname, port, username, password)
cmd = 'bash -c "while :; do cat /some/file >>/tmp/sca.mon; sleep 1 ; done" &'
(stdin, stdout, stderr) = s.exec_command(cmd)
然而,这并不适用于任何理由。它只停留在exec_command
行。当提交后台bash命令并开始执行下一个时,如何强制paramiko离开远程服务器?
注意:我也尝试了nohup bash -c
,但只要我使用&
推送在远程服务器上运行的命令,它就无法工作。
答案 0 :(得分:1)
似乎有效。我只是没有指定shell。我也在使用而非,因为我不熟悉bash中的“ while:”。
s = paramiko.SSHClient()
s.load_system_host_keys()
s.connect(hostname, port, username, password)
cmd = 'while true; do date >> ~/file.txt; sleep 1; done &'
(stdin, stdout, stderr) = s.exec_command(cmd)
s.close()
答案 1 :(得分:0)
以下是我如何解决这个问题(最后):
s = paramiko.SSHClient()
s.load_system_host_keys()
s.connect(hostname, port, username, password)
cmd = "echo 'while true; do date >> ~/file.txt; sleep 1; done &' >run.sh"
(stdin, stdout, stderr) = s.exec_command(cmd)
cmd = "bash run.sh </dev/null >>/dev/null 2>&1"
(stdin, stdout, stderr) = s.exec_command(cmd)
s.close()