linux crontab不执行

时间 : 15-12-29 栏目 : linux运维 作者 : 老薛 评论 : 0 点击 : 981 次

需求:需要每一天对数据库做一个备份,oracle数据库,linux系统。

备份命令采用最简单的导出\导入。

首先确认服务器是否开启任务计划服务,只有root用户才能对crond服务进行开启和关闭

[root@enfo124 ~]# service crond status
crond (pid  1758) is running...
[root@enfo124 ~]# service crond stop
Stopping crond:                                            [  OK  ]
[root@enfo124 ~]# su - cognos
[cognos@enfo124 ~]$ service crond status
crond is stopped
[cognos@enfo124 ~]$ su - root
[root@enfo124 ~]# service crond start
Starting crond:                                            [  OK  ]
[root@enfo124 ~]# service crond status
crond (pid  2805) is running...
[root@enfo124 ~]# su - cognos
[cognos@enfo124 ~]$ service crond status
crond (pid  2805) is running...
最初sh文件内容为

------------------------------------------------------------

#!/bin/bash
expdp username/password@enforc directory=kettledb dumpfile=enforc_$(date +%Y%m%d%H%M).dmp logfile=enforc_$(date +%Y%m%d%H%M).log

-----------------------------------------------------------

文件名字与路径

 /home/oracle/bin/export_enforc.sh

部署开始,切换至oralce用户,查看oracle用户的crontab 计划(crontab -l)。进入任务计划的编辑模式(crontab -e)

添加入以下行:

30 18 * * * /home/oracle/bin/export_enforc.sh

每天18:30分执行export_enforc.sh文件,结果不执行,手工赋值执行/home/oracle/bin/export_enforc.sh是可以的。

于是看了前辈写的sh后说执行的环境不对于是加入以下几行:

#!/bin/bash
if [ -f ~/.bash_profile ];
then
  . ~/.bash_profile
fi
expdp username/password@enforc directory=kettledb dumpfile=enforc_$(date +%Y%m%d%H%M).dmp logfile=enforc_$(date +%Y%m%d%H%M).log

执行命令:

[oracle@enfo212 ~]$ cd ~/
[oracle@enfo212 ~]$ pwd
/home/username

----------可以看出来~/代表用户家目录/home/username。

. 文件= bash 文件 (执行shell文件)

由此可以看出-f查找如果目录存在这个系统环境文件则执行,建造一个shell环境,每个用户都有自己的.bash_profile

再次部署到crontab里面可以看到:

随便部署一个将要发生的时间点,任务被执行,这样就每天在这个时间点就对数据库enforc坐了导出的工作

具体为什么加入哪些代码?可以参考 /home/username/.bash_profile 文件

[sr_db@lc-db-33 ~]$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export SRHOME="/home/sr_db/srdb/10.0"
export SRCLUSTERHOME="/home/sr_db/srcluster"
export SRPORT=1975
export SRDATA="/home/sr_db/srdb/10.0/data"
export SRHOST=localhost
export SRDATABASE=srdb
export SRUSER=srdb
export JAVA_HOME=$SRHOME/jdk
export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export ANT_HOME=$SRHOME/jdk/ant
export SRLICENSE=$SRHOME/etc/srlicense.file
export SRPASSFILE=$SRHOME/etc/.srpass

export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$SRHOME/bin:$SRCLUSTERHOME/bin:$PATH
export LD_LIBRARY_PATH=$SRHOME/lib:$SRHOME/driver/odbc/unixodbc/lib:$SRCLUSTERHOME/lib:$LD_LIBRARY_PATH

本文标签

除非注明,文章均为( 老薛 )原创,转载请保留链接: http://www.bdkyr.com/xtyw002/1118.html

linux crontab不执行:等您坐沙发呢!

发表评论

6 + 8 = ?


博主微信号,很高兴为您提供帮助

随便看看

0