Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29011
  • 博文数量: 7
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 65
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-29 10:43
文章分类

全部博文(7)

我的朋友

分类: LINUX

2014-11-27 18:30:53

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
而在本机上面我们不管是用'' 还是""都是没有问题的

阅读(3556) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~