2009年4月7日星期二

crontab与环境变量

      同事用crontab写一些定时程序,发现从前台调用程序,手动调用程序都没问题,唯独crontab里面就不行,由于里面包含了我和其他人的程序,而其他人的程序被其要求更改为了绝对路径没问题了,我的没改,因此执行出错。


      由于我的程序需要改动比较多,想想就懒得去改了,有没有简单的办法一劳永逸呢?想到除了crontab以外其他地方都没问题,估计是crontab的环境变量出了问题,没有系统的环境变量,所以必须加上绝对路径。于是写了一个小程序测试了一下,果然如此。


      随后google之,发现crontab启动加载的环境变量很少,root的是/etc/crontab,也可以在/var/spool/cron/root查看,不过却发现似乎crontab一点点环境变量都没继承进去,于是自己加上环境变量试试看,ok。于是直接把# env | grep ^SHELL, # env | grep ^PATH, env | grep ^HOME这些环境变量直接放入


SHELL=/bin/bash
PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:.:/root/bin
HOME=/root

0 1 * * * /xxx/....
0 1 * * * /xxx/....

      然后运行,正确。
      总结:绝对路径,或者,环境变量。