您的位置:首页 > 运维架构 > Shell

Linux下shell脚本手动执行和放在crontab中自动执行的结果不一样

2013-03-18 12:47 537 查看


我感觉可能是时间读取出错了。


在脚本最前面加上一句: source ~/.bash_profile


http://blog.chinaunix.net/uid-20648405-id-1907334.html

先试一下再run一次看看 。

http://ivan4126.blog.163.com/blog/static/20949109220129301026060/

问题位置:
14 for i in {0..29}

15 do

16 num=`printf "%05d\n" $i`

17 cat shorturl_score/part-$num >> tmp

18 echo $num

19 done

在crontab中执行的时候,这个循环居然只执行了一次, 太奇怪了。

通过1 * * * * (cd ~/a/b/; ./test.sh > t2 2>&1) 后得到错误日志:
1 printf: 11: {0..29}: expected numeric value

2 00000

3 Finished merge

看样子格式化printf的时候在crontab中行不通,到底为什么呢? 还不知道!!!
[: 20: Illegal number: {0..29}

========================
脚本中的环境变量 env > env.log 打出为:

1 HOME=/home/kk

2 OLDPWD=/home/kk

3 LOGNAME=kk

4 PATH=/usr/bin:/bin

5 SHELL=/bin/sh

6 PWD=/home/kk/weibo/a

明显是很多不同的, 而且PATH少了很多设置。

因此想办法在shell脚本的开头加上这些东西:
1 #!/bin/bash

2 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

3 SHELL=/bin/bash

4 JAVA_HOME=/usr/lib/jvm/java-6-sun

5 _=/usr/bin/env

6

7

8 env > env.log

9 . /etc/profile

10 . ~/.profile
shit! 结果还是失败!!!

解决办法: ==========================================》
方法一:
在/etc/crontab 文件中直接添加我的crontab job任务即可。 但是此法需要root权限才能修改此文件, 在我的本机是可以的;但是我在服务器上面就是不可以了,没有root权限。
方法二:
在crontab -e 中的头部加上PATH, 该PATH和命令行下env得到的PATH一样。
me@server:~/$ crontab -l

# m h dom mon dow command

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

这样的话,上面说的shell脚本头部那一堆垃圾可以都去掉,反正加上去也没有正确的结果。

参考:

You can also set the PATH variable in the crontab file, which will apply to all cron jobs. E.g.
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

15 1 * * * backupscript --incremental /home /root

http://askubuntu.com/questions/23009/reasons-why-crontab-does-not-work 

test.sh这个脚本的crontab任务过了,然后回到项目中的shell脚本中设置还是过不了,检测后对比发觉原来是

头部的这个#后面不能有空格,OMG。。。
#!/bin/bash


总结
我目前的这个场景下需要注意的两点:
1.crontab -e 编辑个人的crontab job, 在头部加上PATH:
# m h dom mon dow command

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
2.运行的shell脚本头部的bash注释不能有空格
# !/bin/bash

#!/bin/bash

主要问题还是这个头部多了空格!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: