运行 无限 Bash 后台循环与 Paramiko
Run Infinite Bash loop in background with Paramiko
我需要 运行 一个无限 bash 循环用于远程服务器上的 background 监控任务。我正在使用 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
行。当paramiko提交后台bash命令并开始执行next时,如何强制paramiko离开远程服务器?
注意:我也试过 nohup bash -c
但是只要我使用 &
在远程服务器的后台推送命令 运行ning 它就不起作用。
似乎有效。我只是不指定 shell。我还使用 while true 因为我不熟悉 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()
以下是我解决这个问题的方法(最终):
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()
我需要 运行 一个无限 bash 循环用于远程服务器上的 background 监控任务。我正在使用 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
行。当paramiko提交后台bash命令并开始执行next时,如何强制paramiko离开远程服务器?
注意:我也试过 nohup bash -c
但是只要我使用 &
在远程服务器的后台推送命令 运行ning 它就不起作用。
似乎有效。我只是不指定 shell。我还使用 while true 因为我不熟悉 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()
以下是我解决这个问题的方法(最终):
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()