作者:假装坚持-我很不爽_547 | 来源:互联网 | 2023-05-17 10:50
我在crontab写的内容是:#DONOTEDITTHISFILE-editthemasterandreinstall.#(tmpcrontab.3516insta
我在crontab写的内容是:
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.3516 installed on Mon Mar 21 10:32:11 2005)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
SHELL=/bin/bash
HOME=/home/oracle
PATH=/usr/kerberos/bin/:/usr/local/bin:/usr/bin:/bin:/usr/sbin/bin:/sbin:/usr/X11R6/bin:/home/oracle/OraHome1/bin
LOGNAME=oracle
LD_ASSUME_KERNEL=2.4.1
ORACLE_BASE=/home/oracle/OraHome1/
ORACLE_HOME=/home/oracle/OraHome1/
ORACLE_TERM=xterm
*/5 * * * * su - oracle -c '/home/oracle/process_up'
错误是:standard in mush be a tty
假如我直接使用*/5 * * * * /home/oracle/process_up
因为我使用pro*c连接数据库,数据库会连接不上,请帮忙
10 个解决方案
standard in must be a tty
意思应该是说stdin(标准输入设备)必须是一个tty(虚拟终端,就是人机交互的接口)
su - oracle .... #你这里使用了标准输入 '-' 但因为crond守护启动的进程或shell并没有tty,所以报这个错。
你加好
SHELL=/bin/bash
HOME=/home/oracle
LOGNAME=oracle
就行了
其它变量应该会从oracle用户目录下的.bash_profile读取不用,这里设置,这里设.bash_profile里没有的变量较好。
然后试着直接用*/5 * * * * /home/oracle/process_up &> myerror.log试试,看看这种情况下出什么错,
另外连不上数据库,不一定是crontab造成的,看看其他原因
还是没有搞好,大家帮我看看:
我的crontab内容:
*/5 * * * * /home/oracle/process_up
我的脚本process_up内容:
SHELL=/bin/bash
HOME=/home/oracle
#PATH=/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin/bin:/sbin:/usr/X11R6/bin:/home/oracle/OraHome1/bin
LOGNAME=oracle
#LD_ASSUME_KERNEL=2.4.1
#ORACLE_BASE=/home/oracle/OraHome1
#ORACLE_HOME=/home/oracle/OraHome1
#ORACLE_TERM=xterm
STR=`ps -A | grep atm_comm`
LEN=${#STR}
SUB=${STR:LEN - 8:8}
if [ "$SUB" != "atm_comm" ]; then
/home/oracle/wangds/source/atm_comm /home/oracle/wangds/source/atm_comm_config.cfg
else
echo "atm_comm find"
fi
STR=`ps -A | grep atm_smi_deal`
LEN=${#STR}
SUB=${STR:LEN - 12:12}
if [ "$SUB" != "atm_smi_deal" ]; then
/home/oracle/wangds/smi_deal/atm_smi_deal /home/oracle/wangds/smi_deal/atm_comm_config.cfg
else
echo "atm_smi_deal find"
fi
进程启动后连接数据库错误
错误提示:
错误号: -12154
错误内容: Error while trying to retrieve text for error ORA-12154
这个错误是:
ORA-12154: TNS: 无法处理服务名
可能你没启动TNS,或服务名没配好
这个错误是:
ORA-12154: TNS: 无法处理服务名
可能你没启动TNS,或服务名没配好
------------------------------
不是这个
我查到另一个问题,直接使用root用户执行脚本也连接不了数据库,只有oracle用户可以的
你用root直接执行
su - oracle -c '/home/oracle/process_up'
正常吗?
你的脚本写的太复杂啦
仔细看会累死人的
我测试了一下,
ORACLE_HOME必须被设到crontab里,不会从当前用户的bash环境读取,这里我更正一下我前面所说的,脚本如下:
# 这个脚本是指/etc/crontab
SHELL=/bin/bash
LOGNAME=oracle
HOME=/home/oracle
#输出写到/var/spool/mail/oracle文件
MAILTO=oracle
ORACLE_HOME=/home/oracle/OraHome1
#注意这里必须要有用户名oracle
*/5 * * * * oracle /home/oracle/process_up
另外你在pro C里的连接是用
exec sql connect ... using : 吗?
如果是必须要保证当前的shell里
$ORACLE_HOME/network/admin下面必须存在正确的tnsname.ora,其中包含正确的tns服务名和连接串
你也可以用(root用户执行)
#crontab -u oracle -e
来只为oracle用户添加crontab,位于/var/spool/cron 下名为oracle的文件。这条命令自动打开vi,并将其保存到/var/spool/cron下名为oracle的文件,可以立刻生效
该文件的格式和系统范围的/etc/crontab基本一样,只有一点:用户的crontab文件(/var/spool/cron)执行的命令行,时间后面的域不能有用户名,如:
*/5 * * * * /home/oracle/process_up
而/etc/crontab必须要有用户名
Ropyn(剑心)
谢谢,你的答案是正确的,不是时间错误了,我前些天搞好了,和你说的一样的,感谢你,我想你帮我太多了,我应该揭贴了