早上好!尝试在多个服务器上启动一个脚本w / nohup并让它在后台运行。
当直接在每台服务器上输入时,命令(由我的供应商提供)按预期运行(python脚本擦除日志文件并通过UDP将相关信息发送到另一台服务器):
nohup tail -f /log/log.log | python /test/deliver.py > /dev/null 2>&1 &
但是,当放入for循环到达许多服务器时,我必须在每个服务器之间按Ctrl-C以保持循环。
请尽可能提供帮助:
for i in `cat /etc/hosts`; do ssh $i nohup tail -f /log/log.log | python /test/deliver.py > /dev/null 2>&1 &; done
解决方案(谢谢大家的帮助):
ssh -f user@host "cd /whereever; nohup ./whatever > /dev/null 2>&1 &"
必须将-f与双引号结合使用,如下所述:
Getting ssh to execute a command in the background on target machine
答案 0 :(得分:1)
就像Etan Reisner在评论中已经指出的那样,你需要远程运行整个命令。此外,您需要从ssh
命令行分离标准输入。
最后,for
循环是错误的形式;使用while
从面向行的输入文件中读取。
while read -r host; do
ssh "$host" 'nohup tail -f /log/log.log |
python /test/deliver.py > /dev/null 2>&1 &' </dev/null
done </etc/hosts
(虽然在我看过的机器上,/etc/hosts
的格式并不适合这种处理。也许只读取第一个字段并丢弃其他字段?这很容易; while read -r host _; do
。 ..)
答案 1 :(得分:0)
我对此没有任何问题:
$ for i in {1..5}; do ssh -i me@ip nohup sleep 10 >/dev/null 2>&1 &
=> done
[7] 34057
[8] 34058
[9] 34059
[10] 34060
[11] 34061
$ #
[7] Done
[8] Done
[9] Done
[10] Done
[11] Done