Linux bash nohup + background in a for loop hang
本问题已经有最佳答案,请猛点这里访问。
早上好!尝试在多个服务器上启动一个脚本(不带hup),并使其在后台运行。
直接在每台服务器上输入时,命令(由我的供应商提供)按预期运行(python脚本会抓取日志文件并通过udp将相关信息发送到另一台服务器):
1 | nohup tail -f /log/log.log | python /test/deliver.py > /dev/null 2>&1 & |
但是,当放入for循环以访问多个服务器时,必须在每个服务器之间按ctrl-c以保持循环运行。
如有可能,请协助:
1 | for i in `cat /etc/hosts`; do ssh $i nohup tail -f /log/log.log | python /test/deliver.py > /dev/null 2>&1 &; done |
解决方案(感谢大家的帮助):
1 | ssh -f user@host"cd /whereever; nohup ./whatever > /dev/null 2>&1 &" |
必须将-f与双引号结合使用,如下所述:
让ssh在目标计算机的后台执行命令
就像EtanReisner已经在评论中指出的那样,您需要远程运行整个命令。此外,您还需要从
最后,
1 2 3 4 | 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 |
(尽管在我见过的机器上,
我对此没有任何问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ 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 |