crontab环境变量问题




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

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

2)脚本执行要用到java或其他环境变量时,通过源命令引入环境变量,如:
猫start_cbp。sh
# !源/etc/profile/bin/sh

出口RUN_CONF=/home//cbp/cbp_jboss d139/conf/平台。参看
/usr/地方/jboss-4.0.5/bin/运行。sh - c兆电子伏,
3)当手动执行脚本好的,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:
0 * * * *。/etc/profile;/bin/sh/var/www/java/audit_no_count/bin/restart_audit。sh


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

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

壳命令的结果可以通过的祝辞”的形式来定义输出

/dev/null代表空设备文件

比;代表重定向到哪里,例如:回声“123”在/home/123.txt

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

2表示stderr标准错误

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

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

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

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

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #




排查发现/etc/profile中没有出口/usr/local路径。所以对于hadoop和java的路径只能是手动出口到脚本中了,或者说也可以赋值到变量中:

,,,,出口JAVA_HOME="/usr/地方/jdk1.6.0_45”

,,,, hadoop=/usr/地方/hadoop-2.4.0/bin/hadoop



crontab环境变量问题