系统教程
您现在的位置是:首页>服务器系统>Linux系统内容

shell用crontab定时器执行脚本结果和手动执行脚本的结果不一致

时间:2018-05-11 出处:未知复制分享人气(次) 【

原脚本代码
#!/bin/bash
cd ~/home/work/hours
RESP=`git pull`
if ["$RESP" =="Already up-to-date." ];then
echo"already up-to-date" >>~/home/logs/deploy.log
else
echo"no already, start redeploy server" >>~/home/logs/deploy.log
sh ~/home/bin/deploy.sh >> ~/home/logs/detail.log 2>&1
fi
手动执行脚本结果和预想的一致
 
结果
但是加入crontab定时任务后,执行的结果却是错误的。
 
原因
这是因为if里的比较字符串用了==,这个比较符合在bash里是可以用的,但是在大部分的shell中都不能用,比如/bin/sh,
如果将此脚本的头部声明成#!/bin/sh,那么这段代码手动执行也是无法执行的
 
修正后的代码
#!/bin/sh
cd ~/home/work/hours
RESP=`git pull`
if ["$RESP" ="Already up-to-date." ];then
echo"already up-to-date" >>~/home/logs/deploy.log
else
echo"no already, start redeploy server" >>~/home/logs/deploy.log
sh ~/home/bin/deploy.sh >> ~/home/logs/detail.log 2>&1
fi
 
总结
1.脚本头部声明用#!/bin/sh,因为这个shell符合posix标准。
2.比较字符串相等使用=而不是使用==
    最新资讯
    热门内容
    小米移动电源能为iPad mini充几次电