crontab启动进程错误:standard in mush be a tty

Dong 2005-03-21 10:56:35
我在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连接数据库,数据库会连接不上,请帮忙
...全文
1616 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dong 2005-03-23
  • 打赏
  • 举报
回复
Ropyn(剑心)
谢谢,你的答案是正确的,不是时间错误了,我前些天搞好了,和你说的一样的,感谢你,我想你帮我太多了,我应该揭贴了
ckc 2005-03-22
  • 打赏
  • 举报
回复
你用root直接执行
su - oracle -c '/home/oracle/process_up'
正常吗?
你的脚本写的太复杂啦
仔细看会累死人的
DanXer 2005-03-22
  • 打赏
  • 举报
回复
我测试了一下,
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 :<tns服务名> 吗?
如果是必须要保证当前的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必须要有用户名
tengulre 2005-03-21
  • 打赏
  • 举报
回复
up
ckc 2005-03-21
  • 打赏
  • 举报
回复
ORACLE_TERM=xterm这一句去掉试试
DanXer 2005-03-21
  • 打赏
  • 举报
回复
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造成的,看看其他原因
nodummy 2005-03-21
  • 打赏
  • 举报
回复
顶一下,升星了,不抢分了,今天没时间仔细看了……
Dong 2005-03-21
  • 打赏
  • 举报
回复
这个错误是:
ORA-12154: TNS: 无法处理服务名

可能你没启动TNS,或服务名没配好
------------------------------
不是这个

我查到另一个问题,直接使用root用户执行脚本也连接不了数据库,只有oracle用户可以的
yown 2005-03-21
  • 打赏
  • 举报
回复
这个错误是:
ORA-12154: TNS: 无法处理服务名

可能你没启动TNS,或服务名没配好
Dong 2005-03-21
  • 打赏
  • 举报
回复
还是没有搞好,大家帮我看看:
我的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

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧