通过举例说明CRONTAB中的用户环境.
一)对于crontab中直接调用shell时的环境.
info$ cat t1.sh#!/bin/shecho "=============`date`=================" >> test.logenv >> test.log将t1.sh加入到info用户的crontab中.0-59 * * * * /opt/info/t1.sh & >/dev/null 2>&11分钟后查看test.log中的crontab调用t1.sh时的环境.info$ cat test.log=============Mon Aug 11 07:11:02 CST 2008=================SHELL=/bin/shUSER=infoPATH=/usr/bin:/binPWD=/opt/infoHOME=/opt/infoSHLVL=2LOGNAME=info_=/usr/bin/env将t1.sh加入到root用户的crontab中.0-59 * * * * /opt/info/t1.sh & >/dev/null 2>&11分钟后查看test.log中的crontab调用t1.sh时的环境root# cat test.log===============Mon Aug 11 07:14:01 CST 2008=============SHELL=/bin/shUSER=rootPATH=/usr/bin:/binPWD=/rootHOME=/rootSHLVL=2LOGNAME=root_=/usr/bin/env从上面可以看到如果用户是直接在crontab中直接写入要执行的shell脚本的话,这个shell将只能调用/usr/bin目录下的程序..如果用户有自定义环境,且shell需要调用这个自定义环境的话,则会有错误发生~~info$ cat t2.sh#!/bin/shecho "===============`date`===========" >> t2.logecho "The env \$INFORMIXSERVER is $INFORMIXSERVER " >> t2.log这里我们希望t2.sh调用$INFORMIXSERVER 这个环境变量..看结果...info$ echo $INFORMIXSERVERrhel_online_netinfo$ cat t2.log===============Mon Aug 11 07:21:01 CST 2008===========The env $INFORMIXSERVER is 显然crontab中调用的t2.sh并没有$INFORMIXSERVER这个用户环境的..那么我们如何把用户自定义环境带给shell呢?二)给crontab加上用户自定义环境.1)在root用户的crontab中加上su - info 以带上用户环境..root# crontab -e0-59 * * * * su - info -c "/opt/info/t1.sh &" >/dev/null 2>&1然后我们再看test.loginfo$ cat test.log=============Mon Aug 11 07:24:01 CST 2008=================SUPPORTED=zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:enHOSTNAME=netskyHOST=netskySHELL=/bin/cshINFORMIXDIR=/opt/informixGROUP=informixUSER=infoLS_COLORS=HOSTTYPE=i386-linuxKDEDIR=/usrONCONFIG=onconfigMAIL=/var/spool/mail/infoPATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/opt/informix/binINPUTRC=/etc/inputrcPWD=/opt/infoLANG=en_US.UTF-8SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpassINFORMIXSERVER=rhel_online_netSHLVL=2HOME=/opt/infoOSTYPE=linuxVENDOR=intelMACHTYPE=i386LOGNAME=infoLESSOPEN=|/usr/bin/lesspipe.sh %sIFXMONDIR=/opt/infoG_BROKEN_FILENAMES=1_=/bin/envOK,这下我们可以看到info用户自定义的环境$INFORMIXSERVER在环境中..2)将用户自定义环境写入到shell脚本中.info$ cat t2.sh#!/bin/shecho "===============`date`===========" >> t2.log. $HOME/.profileecho "The env \$INFORMIXSERVER is "$INFORMIXSERVER >> t2.log1分钟后查看t2.log===============Mon Aug 11 07:32:01 CST 2008===========The env $INFORMIXSERVER is rhel_online_net用户自定义环境生效..当然你也可以完全把需要的用户自定义环境写入到shell中...info$ cat t2.sh#!/bin/shecho "===============`date`===========" >> t2.logINFORMIXSERVER=rhel_online_netecho "The env \$INFORMIXSERVER is "$INFORMIXSERVER >> t2.log1分钟后查看t2.log===============Mon Aug 11 07:34:01 CST 2008===========The env $INFORMIXSERVER is rhel_online_net CRONTAB中的脚本应该自带脚本运行所需要的自定义环境,自定义环境可通过root切换用户方式,脚本里定义或调用相关环境文件的方式来增加.若是需要的自定义环境不能正常调用,crontab的中脚本将不能正确执行
阅读(3520) | 评论(0) | 转发(0) |