crond与环境变量的问题

问题描述:

写了一个exp的脚本,放到了oracle的crontab中,但一直不能执行。

问题原因

crond默认不会加载该用户的.profile和.bashrc文件,它的执行环境只能有一些最基本的环境变量,因此exp的命令因找不到而不执行。

验证过程

写了一个脚本,赋予777权限
[[email protected] ~]# cat /tmp/wjf/env
env |wall

分别把这个脚本加入到root和oracle两个用户的定时任务中

[[email protected] ~]# whoami
root
[[email protected] ~]# crontab -l
01 * * * * /tmp/wjf/env
[[email protected] ~]# 
[[email protected] ~]$ whoami
oracle
[[email protected] ~]$ crontab -l
02 * * * * /tmp/wjf/env
[[email protected] ~]$ 

时间到,执行结果为

Broadcast message from [email protected] (Fri May  8 17:36:02 2015):

SHELL=/bin/sh
USER=root
PATH=/usr/bin:/bin
_=/usr/bin/env
PWD=/root
HOME=/root
SHLVL=2
LOGNAME=root
[[email protected] ~]$ 
Broadcast message from [email protected] (Fri May  8 17:38:01 2015):

SHELL=/bin/sh
USER=oracle
PATH=/usr/bin:/bin
_=/usr/bin/env
PWD=/home/oracle
HOME=/home/oracle
SHLVL=2
LOGNAME=oracle

可以看出crond打开的shell环境。只有一些最基本的环境变量,所以,你不要想着把oracle下的命令写成脚本放在oracle的定时任务就万事大吉了。实际它是不行的。

解决办法

在脚本里手动export环境变量。

或者

在脚本最前面source  环境变量文件

或者

. (空格)  环境变量文件

时间: 2024-10-27 09:45:37

crond与环境变量的问题的相关文章

8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件

8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件 扩展 bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719 # 8.6 管道符和作业控制 ![mark](http://oqxf7c508.bkt.clouddn.com/blog/20170816/214503952.png?imageslim) - 管道符的命令就是把前面输出的结果交给后面的命令 ``` [[email protected] 

Linux中crontab的坑爹环境变量问题

手动在CentOS中执行sh脚本,调用java程序,一切正常: 将该sh加入crontab中定时调度之后,挂了,完全没有执行到的感觉啊!!! 查看crontab执行日志: cat /var/log/cron 有执行记录,擦擦擦~~~ 难道用crontab调用执行会报错,打印日志先: crontab -e 40 10 * * * /home/job.sh 2>>/home/log 再调度一次,查看日志: cat /home/log 还真报错了: Exception in thread "

【linux】crontab的环境变量问题

今天遇到一个奇怪的问题,同样一个脚本,手动执行没问题,加入到crontab中,就出现无法运行的情况,第一反应是环境变量问题 环境说明: 操作系统:centos 用户:test用户通过sudo su切换到root用户执行脚本和计划任务 程序目录:脚本中引用的程序在/usr/local/bin目录下 1,查看/etc/crontab,发现这里有写环境变量,之前没有红框中的目录,我手动添加以后,重启crontab服务. service crond restart 重启之后,测试还是不行,做了一个这样的

crontab环境变量问题

在crontab中运行脚本来查看hadoop相关信息,由于hadoop.java默认部署在/usr/local下面, 所以导致crontab执行时出现报错.具体与环境变量有关系,下文描述比较清楚. ################ 下文出处: http://xiachaofeng.iteye.com/blog/1405184 今天遇见一个问题,crontab的定时任务不能自动执行,但是手动执行脚本一直能成功.查到最后,发现是脚本里用了系统的环境变量.下面开始解释: 1.crontab与环境变量

8.6-8.9 管道符和作业控制、shell变量,环境变量

8.6 管道符和作业控制 管道符"|" 管道符的作用在于将符号前面的结果丢给符号后面的命令.管道符后面并不是所有的命令都可以,一般针对文档操作的命令比较常用,eg:cat.less.head.tail.grep.cut.sort.wc.uniq.tee.tr.split.sed.awk等等. 作业控制 Ctrl+z 暂停一个正在执行的任务 jobs 查看在后台运行的任务 bg[id] =background把任务调到后台运行 fg[id] =foreground把任务调到前台运行 &q

管道符、作业控制、变量、定义全局变量、环境变量

管道符 符号|:管道符,将前面的命令交给后面的命令: 实验1:统计1.txt的段落长度:cat 1.txt |wc -l [[email protected] abc]# cat 1.txt |wc -l 2 [[email protected] abc]# 实验2:查看2.txt文件,将文件中包含r的字符串打印出来:cat 2.txt |grep 'r' [[email protected] abc]# cat 2.txt|grep 'r' r111111 r r r [[email prot

管道符和作业控制,shell变量,环境变量配置文件

管道符 "|"作用:把前面命令的输出结果交给后面的命令 作业控制 ctrl z 暂停一个任务 [[email protected] ~]# vim 1.txt [1]+ 已停止 vim 1.txt [[email protected] ~]# vim 2.txt [2]+ 已停止 vim 2.txt [[email protected] ~]# jobs [1]- 已停止 vim 1.txt [2]+ 已停止 vim 2.txt [[email protected] ~]# jobs命

Linux下修改环境变量PATH

1.什么是环境变量(PATH) 在Linux中,在执行命令时,系统会按照PATH的设置,去每个PATH定义的路径下搜索执行文件,先搜索到的文件先执行. 我们知道查阅文件属性的指令ls 完整文件名为:/bin/ls(这是绝对路径), 那你会不会觉得很奇怪:"为什么我可以在任何地方执行/bin/ls这个指令呢? " 为什么我在任何目录下输入 ls 就一定可以显示出一些讯息而不会说找不到该 /bin/ls 指令呢? 这是因为环境变量 PATH 的帮助所致呀! 当我们在执行一个指令癿时候,举例

Tomcat启动分析(我们为什么要配置CATALINA_HOME环境变量)

原文:http://www.cnblogs.com/heshan664754022/archive/2013/03/27/2984357.html Tomcat启动分析(我们为什么要配置CATALINA_HOME环境变量) 用文本编辑工具打开用于启动Tomcat的批处理文件startup.bat,仔细阅读.在这个文件中,首先判断CATALINA_HOME环境变量是否为空,如果为空,就将当前目录设为CATALINA_HOME的值.接着判断当前目录下是否存在bin\catalina.bat,如果文件