for i in `cat iplist |grep -v "#"|awk '{print $2}'|sort -u`; do ssh $i "(echo '16 4 * * * sh /home/script/a.sh > /home/script/a.log 2>&1' ;crontab -l )|crontab" & done
在实际工作当中,我们对许多远程主机添加计划任务时,如果当时没有平台或者工具,那么我们就需要写shell来处理这些工作,其中下面的这个循环中"(echo '16 4 * * * sh /home/script/a.sh > /home/script/a.log 2>&1' ;crontab -l )|crontab" 是实现这一功能的关键
在写的时候遇到的问题主要是因为当时在在网上找了很多资料,发现echo 的计划任务是用的双引号,即下面的差别:
echo '16 4 * * * sh /home/script/a.sh > /home/script/a.log 2>&1'
echo "16 4 * * * sh /home/script/a.sh > /home/script/a.log 2>&1"
其中使用""不成功的原因主要是
echo "word" 可以使用变量,但是不能出现特殊字符 例如echo "$HOME"
echo 'word' 禁止替换变量,原样输出 例如 echo '$HOME' 显示$HOME 不解析变量 ,即这种方式,我们相当于是在本机上面执行
"(echo "16 4 * * * sh /home/script/a.sh > /home/script/a.log 2>&1' ;crontab -l )|crontab"
而在本机上面我们不管是用'' 还是""都是没有问题的
阅读(3594) | 评论(0) | 转发(0) |