expdp: command not found、oracle定时任务crontab里无法执行expdp

要实现的功能是EXPDP备份到本地,环境变量./bash_profile也添加了,写好了crontab任务,但是不执行。在终端中手工执行是可以的。

然后就去tail /var/spool/mail/oracle中看执行提示:expdp: command not found

网上一查是因为子shell中没有环境变量。需要添加source命令。

解决方法:在你的sh脚本第一行添加source ./bash_profile即可,但你的./bash_profile中得设置好变量,例如:

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin

source命令:

source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令。
功能:使Shell读入指定的Shell程序文件并依次执行文件中的所有语句
source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
用法:
source filename 或 . filename
source命令(从 C Shell 而来)是bash shell的内置命令;点命令(.),就是个点符号(从Bourne Shell而来)是source的另一名称。

source filename 与 sh filename 及./filename执行脚本的区别在那里呢?
1.当shell脚本具有可执行权限时,用sh filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中,所有”.”是用来表示当前目录的。
2.sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,除非使用export。
3.source filename:这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

环境变量文件补充

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。并从/etc/profile.d目录的配置文件中搜集shell的设置。
/etc/bashrc:为每一个运行bash shell的用户执行此文件。当bash shell被打开时,该文件被读取。
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件。

举例:

/home/oracle/.bash_profile   oracle用户的配置
/root/.bash_profile   root用户的配置

更多参考:

crontab 里无法执行expdp

linux下的source命令

Linux将命令添加到PATH中

linux下 /etc/profile、~/.bash_profile ~/.profile的执行过程

 

转载请注明原作者,如果你觉得文章对你有帮助或启发,也可以来请我喝咖啡

点赞