http://xiachaofeng.iteye.com/blog/1405184

今天遇见一个问题,crontab的定时任务不能自动执行,但是手动执行脚本一直能成功。查到最后,发现是脚本里用了系统的环境变量。下面开始解释:

1.crontab与环境变量
不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:

1)脚本中涉及文件路径时写全局路径;

2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

2.其他应该注意的问题
1)新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
2)每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。
3)当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
4)千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’`。

3.crontab中的输出配置

crontab中经常配置运行脚本输出为:>/dev/null 2>&1,来避免crontab运行中有内容输出。

shell命令的结果可以通过‘> ’的形式来定义输出

/dev/null 代表空设备文件

> 代表重定向到哪里,例如:echo "123" > /home/123.txt

1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"

2 表示stderr标准错误

& 表示等同于的意思,2>&1,表示2的输出重定向等同于1

那么重定向输出语句的含义:

1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,不显示任何信息。

2>&1 表示标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

最新文章

  1. windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)
  2. [Data Structure] LCSs——最长公共子序列和最长公共子串
  3. Linux文件系统
  4. SQL语句学习手册实例版
  5. mac--又发现了一款mac快捷键神器
  6. 20145202、20145225、20145234 《信息安全系统设计基础》实验五 简单嵌入式WEB 服务器实验
  7. Android总结篇系列:Android Service
  8. random模块
  9. Windows 10的TPM模块到底是不是美国全球监控体系的奠基石?
  10. ubuntu13.04装配oracle11gR2
  11. stringstream函数(i o)
  12. SharePoint 2016 每天预热脚本介绍
  13. [Egret]长按图片分享、分享图片、本地存储
  14. 二 @ResponseBody用法
  15. [JZOJ5511] 送你一个DAG
  16. tensorflow 语音识别报错
  17. CharacterController平滑移动到某点
  18. 51nod1693 水群 最短路
  19. Windows下如何更新 node.js
  20. 基于虹软sdk,java实现人脸识别(demo)

热门文章

  1. 逻辑回归与神经网络还有Softmax regression的关系与区别
  2. Sublime_SublimeServer
  3. sencha touch 选择器
  4. Aizu2249 Road Construction(dijkstra优化+思路 好题)
  5. hihocoder1051 补提交卡(贪心)
  6. django之ORM补充
  7. performSelector may cause a leak because its selector is unknown
  8. 【Linux】Centos下安装ffmpeg
  9. Jmeter也能IP欺骗!
  10. bootstrap-datepicker应用