当前位置: 技术问答>linux和unix
crontab 环境变量问题
来源: 互联网 发布时间:2017-01-09
本文导语: OS: CentOS 5.x 比如说我要在crontab中定时执行一个java程序,需要用到CLASSPATH环境变量,必须在编辑crontab文件中设置所需的classpath,也就是说crontab执行的时候需要在crontab里面写PATH,HOME等有限几个环境变量. ...
OS: CentOS 5.x
比如说我要在crontab中定时执行一个java程序,需要用到CLASSPATH环境变量,必须在编辑crontab文件中设置所需的classpath,也就是说crontab执行的时候需要在crontab里面写PATH,HOME等有限几个环境变量.
其实以上一段,有点不太明白..有人告诉我,crontab不是用户去执行,而是一个线程,所以不会读取到/etc/profile里面的环境变量...
那为什么我把date > /home/date.txt写到crontab里面就可以直接执行呢??,,既然线程不知道环境变量,那它怎么知道date这个命令呢???
其实这种事情同样出现在rc.local里面.再请问rc.local也是跟crontab一样的原理吗?还是所有的shell都是这样的..
比如说我要在crontab中定时执行一个java程序,需要用到CLASSPATH环境变量,必须在编辑crontab文件中设置所需的classpath,也就是说crontab执行的时候需要在crontab里面写PATH,HOME等有限几个环境变量.
其实以上一段,有点不太明白..有人告诉我,crontab不是用户去执行,而是一个线程,所以不会读取到/etc/profile里面的环境变量...
那为什么我把date > /home/date.txt写到crontab里面就可以直接执行呢??,,既然线程不知道环境变量,那它怎么知道date这个命令呢???
其实这种事情同样出现在rc.local里面.再请问rc.local也是跟crontab一样的原理吗?还是所有的shell都是这样的..
|
crontab是脚本,它最终还是由bash shell这个程序去读的,脚本就是一个文本文件,需要一个shell程序去解析,那就是bash shell了.
bash shell读到了一行叫做date>/home/date.txt,它就分析出来这是一条合法的命令,于是就fork一个子进程,子进程去调用date这个程序,至于shell进程怎么知道date在哪里呢? 因为shell进程的环境变量表里的PATH存储了搜索路径,于是fork的子进程也继承了这个环境表,你不必担心execlp找不到date程序的位置.
bash shell读到了一行叫做date>/home/date.txt,它就分析出来这是一条合法的命令,于是就fork一个子进程,子进程去调用date这个程序,至于shell进程怎么知道date在哪里呢? 因为shell进程的环境变量表里的PATH存储了搜索路径,于是fork的子进程也继承了这个环境表,你不必担心execlp找不到date程序的位置.