在后台用Parami运行无限Bash循环

2024-10-01 11:35:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要为远程服务器上的后台监视任务运行一个无限bash循环。我使用pythonParamiko来完成这项工作,并运行以下命令:

 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命令并启动execute next like时,如何强制paramiko离开远程服务器? 注意:我也尝试过nohup bash -c,但只要我使用&来推送在远程服务器上后台运行的命令,它就不起作用了。在


Tags: 命令服务器cmdbashhostparamiko远程load
2条回答

似乎在工作。我只是没有指定shell。另外,我使用whiletrue,因为我不熟悉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()

相关问题 更多 >