Chinaunix

标题: 关于crontab不执行的问题,急! [打印本页]

作者: carlosdw    时间: 2006-12-05 18:40
标题: 关于crontab不执行的问题,急!
应客户要求,做oracle的exp和imp的脚本自动备份和恢复测试,单独运行脚本可以执行(虽然有warnings),但是加入到crontab后,始终无法自动执行,后来查看/var/cron/log发现如下错误:\r\n\r\n! *** cron started ***   pid = 185 Mon Dec  4 15:15:12 2006\r\n! bad user (oracle) Tue Dec  5 01:00:00 2006\r\n>  CMD: /export/home/oracle/exp.sh\r\n>  oracle 1048 c Tue Dec  5 01:00:00 2006\r\n<  oracle 1048 c Tue Dec  5 01:00:00 2006 rc=1\r\n>  CMD: [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1\r\n>  root 1057 c Tue Dec  5 02:01:00 2006\r\n<  root 1057 c Tue Dec  5 02:01:00 2006 rc=1\r\n>  CMD: /usr/sbin/logadm\r\n>  root 1068 c Tue Dec  5 03:10:00 2006\r\n<  root 1068 c Tue Dec  5 03:10:00 2006\r\n>  CMD: [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean\r\n>  root 1082 c Tue Dec  5 03:30:00 2006\r\n<  root 1082 c Tue Dec  5 03:30:00 2006\r\n>  CMD: /export/home/oracle/sys_imp.sh\r\n>  oracle 1811 c Tue Dec  5 17:10:00 2006\r\n! bad user (oracle) Tue Dec  5 17:10:00 2006\r\n<  oracle 1811 c Tue Dec  5 17:10:00 2006 rc=1\r\n! bad user (oracle) Tue Dec  5 18:00:00 2006\r\n>  CMD: su - oracle -c \"/export/home/oracle/sys_exp.sh\"\r\n>  oracle 1877 c Tue Dec  5 18:00:00 2006\r\n<  oracle 1877 c Tue Dec  5 18:00:00 2006 rc=1\r\n! bad user (oracle) Tue Dec  5 18:10:00 2006\r\n>  CMD: su - oracle -c \"/export/home/oracle/sys_imp.sh\"\r\n>  oracle 1888 c Tue Dec  5 18:10:00 2006\r\n<  oracle 1888 c Tue Dec  5 18:10:00 2006 rc=1\r\n\r\n如何解决这bad user....?请高手赐教,很着急,十分感谢!
作者: 新注册用户    时间: 2006-12-05 19:33
你用什么用户做crontab?\r\n你crontab -l 来看看。\r\n另把oracle的环境变量SID等加入到shell里。
作者: carlosdw    时间: 2006-12-05 22:35
我是用oracle用户做的。\r\ncrontab -l下有计划:00 17 * * * su - oracle -c \"/export/home/oracle/sys_exp.sh\"\r\noracle的环境变量SID等也已经加入到shell里了。\r\n但是,it still does not work automatic yet...
作者: 新注册用户    时间: 2006-12-05 22:54
00 17 * * * su - oracle -c \"/export/home/oracle/sys_exp.sh\"\r\n你不是用oracle用户做的crontab ?\r\n怎么又 su - oracle啊?\r\n直接 00 17 * * *  /export/home/oracle/sys_exp.sh
作者: suisuiyouyu    时间: 2006-12-05 23:30
是oracle怎么su - oracle? 要输入密码的,要么用root su - oracle -c \"command\"\r\n要么在oracle用户下直接做,不用su
作者: selina33    时间: 2006-12-06 10:13
你之前是sudo 到oracle用户下执行的么?
作者: carlosdw    时间: 2006-12-06 11:42
一开始我就是直接在oracle用户下作的,没有用su,但是因为始终没有反应,才加上su试试的。\r\n从顶上的log应该也可以看得出来,我就不明白为什么会是bad user.
作者: carlosdw    时间: 2006-12-06 14:34
我又重新做了一次crontab,过程如下:\r\nroot创建一个文本test.cron存于/目录下,\r\n#chmod a+w test.cron\r\n#su - oracle\r\nbash-2.05$vi test.cron\r\n00 14 * * * /export/home/oracle/sys_exp.sh\r\n10 14 * * * /export/home/oracle/sys_imp.sh\r\n~\r\n~\r\n~\r\n\"test.cron\" 2 lines, 86 characters\r\nbash-2.05$ crontab test.cron\r\nbash-2.05$ crontab -l\r\n00 14 * * * /export/home/oracle/sys_exp.sh\r\n10 14 * * * /export/home/oracle/sys_imp.sh\r\n\r\n到点,查看/var/cron/log,仍然报bad user:\r\n! *** cron started ***   pid = 185 Wed Dec  6 11:50:01 2006\r\n>  CMD: /export/home/oracle/sys_exp.sh\r\n>  oracle 658 c Wed Dec  6 14:00:00 2006\r\n! bad user (oracle) Wed Dec  6 14:00:00 2006\r\n<  oracle 658 c Wed Dec  6 14:00:00 2006 rc=1\r\n! bad user (oracle) Wed Dec  6 14:10:00 2006\r\n>  CMD: /export/home/oracle/sys_imp.sh\r\n>  oracle 662 c Wed Dec  6 14:10:00 2006\r\n<  oracle 662 c Wed Dec  6 14:10:00 2006 rc=1\r\n\r\n为什总是报bad user呢?到底是哪儿不对呢?怎么样解决啊?头都大了...
作者: yuhuohu    时间: 2006-12-06 16:35
直接用oracle用户写cron吧\r\n#su - oracle\r\n$EDITOR=vi;export EDITOR---------如果是C shell,$setenv EDITOR vi\r\n$crontab 还是$crontab -e我忘记了 \r\n>00 14 * * * /export/home/oracle/sys_exp.sh\r\n>10 14 * * * /export/home/oracle/sys_imp.sh\r\n\r\n另外/etc/cron.d/目录下还有cron.allow和cron.deny两个文件可以控制crontab的执行\r\n用/etc/cron.d/cron.deny和/etc/cron.d/cron.allow文件来控制对crontab命令的访问,其作用规则同at命令的访问控制,执行优先级为cron.allow>cron.deny具体如下:\r\n1.        当存在cron.allow文件时,只有此文件中列出的用户可以执行crontab(如果为空所有人都没权限)\r\n2.        当仅有cron.deny文件存在时,只有此文件中列出的用户不能执行crontab\r\n3.        当两者都不存在时,除了root用户 所有人都不能访问crontab
作者: Philmoon    时间: 2006-12-06 18:02
原帖由 yuhuohu 于 2006-12-6 16:35 发表\r\n3.        当两者都不存在时,除了root用户 所有人都不能访问crontab  ...
\r\n\r\ncrontab -e\r\n\r\n怀疑bad user是“两者都不存在”引起的
作者: carlosdw    时间: 2006-12-06 18:22
cron.allow不存在,cron.deny存在,且cron.deny里不包括用户oracle。也就意味着oracle用户是可以执行crontab的咯?
作者: carlosdw    时间: 2006-12-06 19:25
原帖由 yuhuohu 于 2006-12-6 16:35 发表\r\n直接用oracle用户写cron吧\r\n#su - oracle\r\n$EDITOR=vi;export EDITOR---------如果是C shell,$setenv EDITOR vi\r\n$crontab 还是$crontab -e我忘记了 \r\n>00 14 * * * /export/home/oracle/sys_exp.sh\r\n>10 ...
\r\n我按你的步骤做了一遍,可惜还是。。。。请看log:\r\n! bad user (oracle) Wed Dec  6 19:20:00 2006\r\n>  CMD: /export/home/oracle/sys_exp.sh\r\n>  oracle 735 c Wed Dec  6 19:20:00 2006\r\n<  oracle 735 c Wed Dec  6 19:20:00 2006 rc=1\r\n\r\n真是无奈了,我在搞不定头儿都该急了。。。\r\n刚才在网上查了一下,貌似有人说这bad user跟password有关,如果是的话,我该在哪儿添加password呢?
作者: yuhuohu    时间: 2006-12-06 20:31
那真抱歉了。。。。偶也不知道
作者: yuhuohu    时间: 2006-12-06 20:32
对了默认情况下,用哪个用户建立crontab,那么/etc/cron.d目录下的文件就是哪个用户名\r\n如果用oracle用户建立crontab,那/etc/cron.d/目录下就多一个oracle的文件,好像是哦,会不会是因为文件名&用户名不一致
作者: carlosdw    时间: 2006-12-06 21:20
是在/var/spool/cron/crontabs下多了个文件oracle,里面就是你做的内容,但是到点儿执行的时候就。。。唉
作者: yuio654    时间: 2006-12-08 16:19
你现在的问题是oracle这个用户不能用crontab吧?你可以先试试看先执行一个简单的脚本比如`date看能不能执行。在提示符下crontab -l查看一下,把你的sys_exp.sh这个文件和相关的文件贴出来看看\n\n[ 本帖最后由 yuio654 于 2006-12-8 16:21 编辑 ]
作者: selina33    时间: 2006-12-08 18:54
我以前碰过和你一样的错误。。是因为oracle的密码过期了\r\n我看了你的操作。一直都没有让你输入oracle密码\r\n\r\n你可以试一下先用oracle用户登陆。。是不是密码有问题
作者: zhoujm1976    时间: 2007-02-16 10:20
passwd oracle\r\n重设一下密码应该就可以了
作者: stephen1    时间: 2007-02-26 21:14
标题: 是密码过期导致crontab不能执行
首先这个问题和环境变量没有关系,这个问题是一个特定的用户的crontab不能执行,而不是Oracle数据库相关脚本不能执行。\r\n\r\n我遇到的问题是:\r\n\r\noracle9i 用户,sun solaris8 下的用户的crontab 不能执行,但root中的crontab可以执行,测试脚本\r\n在oracle9i用户:\r\n* * * * * date>/tmp/oracle9i.log\r\n\r\n在root用户:\r\n* * * * * date>/tmp/root.log\r\n\r\n发现root正常,而oracle9i的crontab不正常,没有执行。\r\n\r\n第一怀疑 cron 进程没有启动,或有问题,检查,用/etc/init.d/cron stop\r\n\r\n/etc/init.d/cron start启动后问题依然如此。\r\n\r\n第二步检查   /etc/cron.d/cron.deny  /etc/cron.d/cron.allow,正常。\r\n\r\n上google查,发现可以看http://dbforums.com/t808379.html,\r\n\r\n检查  /var/cron/log,过一分钟,出现 ! bad user信息。\r\n>  sys 1688 c Mon Feb 26 20:43:00 2007\r\n! bad user (oracle9i) Mon Feb 26 20:43:00 2007\r\n\r\n不知如何处理,检查 /etc/passwd 和 /etc/shadow无异常。\r\n\r\n后来欢迎密码过期,经过检查确实如此:我们为了搞IT内控,设置了用户密码90天需要修改,\r\n\r\n但过了90天没有修改Oracle9i用户的密码,平常用root登录,su - oracle9i使用系统,\r\n\r\n没有发现这个问题。\r\n\r\n用 passwd -sa 可以看出:\r\n\r\n\r\nroot@xxxxx # passwd -sa\r\nroot  PS\r\ndaemon  LK\r\nbin  LK\r\nsys  LK\r\nadm  LK\r\nlp  LK\r\nuucp  LK\r\nnuucp  LK\r\nlisten  LK\r\nnobody  LK\r\nnoaccess  LK\r\nnobody4  LK\r\noracle9i  PS    02/26/07    0  3000  90\r\n\r\n\r\n用 passwd -x 3000 oracle9i,修改密码后定时正常,准备不要求经常改oracle9i密码。\r\n\r\n\r\n因为定时没有执行导致一个空间监控脚本没有执行,从而导致告警短信没有收到,又遇到 omni backup\r\n\r\n磁带库故障,archlog 文件很多,未备份走,差一点出问题。\r\n\r\n\r\n总结:定时不执行,应检查 /var/cron/log文件,看有没有 bad user,有的话应检查密码是否失效。\r\n\r\n      环境变量的问题是crontab有执行,但执行不了,和这个问题无关。
作者: stephen1    时间: 2007-02-26 21:16
标题: 忘记说了
感谢 zhoujm1976 (james)  !!!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2