Chinaunix

标题: shell 里面让命令后台执行怎么弄? [打印本页]

作者: luxinjun888    时间: 2012-03-19 13:24
标题: shell 里面让命令后台执行怎么弄?
本帖最后由 luxinjun888 于 2012-03-19 13:36 编辑

大家好! 今天写了一个简单SHELL,主要用于吧我们的域名推送到DNS服务器上:
现在我想如果要推送的域名和DNS服务器地址很多的话,那需要大量的时间来完成这个工作,而我必须在DNS服务器设置的ttl周期(10分钟)内完成。现在有这么个想法,就是DNS服务器地址提取后交给DIG,而这一个dig命令就在后台运行,然后dig直接加载下一个dns服务器地址,而不是等上一个dig他运行完后再取下一个$i 地址,这样进程可以同时跑上百个DIG并发执行,加快速度。不过不知道怎么实现,请大家帮帮忙了。

#!/bin/bash
#2011-3-19
cat /root/dnsyuming | while read h              //dnsyuming保存了我需要推送的域名,如 www.sina.com.cnwww.163.com 等,每行一个。
do
echo $h

cat /root/test | while read i                        //test里面保存了DNS服务器的地址,如202.106.0.20   ,106.187.2.2
do  echo $i
dig +tries=0  @$i $h >> test.txt

if [ $? != 0  ];then
   echo $i >> testerr.txt
fi

done
done

作者: mpstat    时间: 2012-03-19 13:32
&
作者: luxinjun888    时间: 2012-03-19 13:44
本帖最后由 luxinjun888 于 2012-03-19 13:45 编辑

& 只是在后台运行,dig在循环的时侯也会等当前提取的DNS IP地址运行完成后再加载下一个IP地址再运行吧?  我希望DIG在获取一个IP地址后,就在后台运行命令,而不管是否运行完成得到结果,直接提取下一个IP地址,再执行一个DIG命令, ,现在情况是提取一个IP,后台就只有一个DIG进程。而希望得到的结果是后台 可能同时并发运行上百个DIG进程。

可能我表达的不太清楚,不好意思。
作者: Perl_Er    时间: 2012-03-19 13:45
回复 1# luxinjun888


   
Use the following to invoke your script, run it in the background, and still allow yourself to log out:

nohup mydaemonscript  0<&-  1>/dev/null  2>&1  &

or:

nohup mydaemonscript  >>/var/log/myadmin.log  2>&1  <&-  &
作者: nuclearxin    时间: 2012-03-19 14:17
大家都是来回答标题豆
作者: luxinjun888    时间: 2012-03-19 14:24
非常感谢Perl_Er  我用DIG  加上nohup命令执行,应该可以达到我的要求。 谢谢大家!
作者: qpengf    时间: 2012-03-19 15:06
回复 4# Perl_Er

你好,请教一下,你的答案的意思是要让同时有多个进程一块来run,把标准输入关闭就可以了是吧。

   
作者: freeterman    时间: 2012-03-19 15:27
把我们的域名推送到DNS服务器上:

你的脚本要干什么 没有看懂

作者: Shell_HAT    时间: 2012-03-19 21:37
回复 6# luxinjun888


http://bbs.chinaunix.net/thread-1118626-1-1.html




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2