那个root文件里面没有打印任何东西,我等了这么久,一点东西都没有。
unix issu1 :
使用命令:mail 也可以查看
OSW 没有执行,检查 /var/spool/mail/root 文件,发现cron 模式是从根目录开始执行,因此无法发现执行目录。
sh修改如下:
$SCRIPTLOC/OSWatcher.sh 30 360
修改为
cd $SCRIPTLOC
$SCRIPTLOC/OSWatcher.sh 30 360
另外加入profile 选项:
cd $HOME
OSNAME=`uname`
case $OSNAME in
SunOS) OSNAME=1 ;;
HP-UX) OSNAME=2 ;;
AIX) OSNAME=3 ;;
Linux) OSNAME=4 ;;
esac
if [ $OSNAME -eq 4 ]
then
. ./.bash_profile
else
. ./.profile
fi
linux issue 2:
crontab执行后日志文件路径
/var/log/cron
如crontab 没有成功,检测crontab 服务是否启动,
/etc/init.d/crond status
/etc/init.d/crond restart
cron 是系统守护进程,位置:
/etc/init.d/crond
参数:
start
stop
restart
reload
crontab执行后日志文件路径
/var/log/cron
##issue 3
Linux定时任务,执行shell文件失败问题&&mailed 73 bytes of output but got status 0x004b#012报错解决
加入调试语句 2>&1
为了找到错误的具体信息,我把语句改成了
mysqldump -uxxx -pxxx dbname > backup.sql >xxx.log 2>&1
###########sample :
31 16 * * * sh /orabak/oswbb/oswbb/OSW_init.sh > /tmp/1.log
unix AIX: 使用cron fork 出一个OSW进程
[root@nbutest1:/]# ps -ef|grep OSW
root 11862018 19202296 0 Nov 30 - 0:32 /bin/sh ./OSWatcherFM.sh 360 /oradata/oswbb/oswbb/archive 《— 第三级子进程
root 12910804 21889042 0 16:02:00 pts/5 0:00 grep OSW
root 19202296 29818988 0 Nov 30 - 1:14 /bin/sh /oradata/oswbb/oswbb/OSWatcher.sh 30 360 <- 第二级子进程
root 29818988 6815964 0 Nov 30 - 0:00 sh /oradata/oswbb/oswbb/OSW_init.sh <- 第一级子进程
[root@nbutest1:/]# ps -ef|grep 6815964
root 6815964 1 0 Sep 15 - 0:53 /usr/sbin/cron <- 这是父进程,父进程是cron
root 29818988 6815964 0 Nov 30 - 0:00 sh /oradata/oswbb/oswbb/OSW_init.sh
root 32833782 21889042 0 16:03:07 pts/5 0:00 grep 6815964
linux: 使用cron fork 出3个OWS进程
[root@nbutest:/orabak/oswbb/oswbb]# more /tmp/2.log
root 10127 10126 0 16:26 ? 00:00:00 /bin/sh -c sh /orabak/oswbb/oswbb/OSW_init.sh > /tmp/1.log <- 第一级子进程
root 10128 10127 0 16:26 ? 00:00:00 sh /orabak/oswbb/oswbb/OSW_init.sh <- 第二级子进程
root 10136 10128 0 16:26 ? 00:00:00 sh /orabak/oswbb/oswbb/OSW_init.sh <- 第三级子进程
[root@nbutest:/orabak/oswbb/oswbb]# ps -ef|grep 10126
root 10126 5076 0 16:26 ? 00:00:00 crond <- 这是父进程,父进程是cron
unix HP-UNIX 使用cron fork 出2个OSW进程
[root@nbutest2:/]# more /tmp/2.log
root 20751 6990 2 16:31:00 ? 0:00 sh -c sh /orabak/oswbb/oswbb/OSW_init.sh > /tmp/1.log
root 20752 20751 0 16:31:00 ? 0:00 sh /orabak/oswbb/oswbb/OSW_init.sh
###issue 5
cx_Oracle库导入失败引起crontab中python程序运行失败,并且无错误提示
今天遇到一个问题:
一个python脚本命令行运行时很正常,放到crontab中就无法工作,日志也没有记录,找了半天,终于发现问题所在。
在脚本最上方,程序如下:
-
#!/usr/local/bin python
-
# coding=utf8
-
import cx_Oracle
-
import sys
-
import time
注意,这里
import cx_Oracle
cx_Oracle需要依赖oracle的ORACLE_HOME环境。我发现ORACLE_HOME定义在/etc/profile下,在这里修改的内容是对所有用户起作用的,但是对crontab是不起作用的。以下是各个文件的一个作用域:
(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。
(5)~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承 /etc/profile中的变量,他们是"父子"关系。
(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
解决办法:
30 7 * * * . /etc/profile; /usr/local/bin/python2.7 /data/storeDataToOracleDB.py &
这里加上了
. /etc/profile;
ok,问题解决。