我根据下面的脚本,能输出数据,MAILS命令能发到我的邮件服务器上面,但是如果只跑脚本只能输出结果,而不能吧结果发到我邮件服务器上面~!请各位帮帮我~!谢谢~!
6. 检查表空间的使用 
以下的脚本检测表空间的使用。假如表空间只剩下10%,它将会发送一个警告email。 
##################################################################### 
## ck_tbsp.sh ## 
##################################################################### 
#!/bin/ksh EDITOR=vi; export EDITOR 
ORACLE_SID=PPRD10; export ORACLE_SID 
ORACLE_BASE=/data/app/oracle; export ORACLE_BASE 
ORACLE_HOME=$ORACLE_BASE/10.2.0; export ORACLE_HOME 
LD_LIBRARY_PATH=$ORACLE_HOME/lib; export LD_LIBRARY_PATH 
TNS_ADMIN=/var/opt/oracle;export TNS_ADMIN 
NLS_LANG=american; export NLS_LANG 
NLS_DATE_FORMAT='Mon DD YYYY HH24:MI:SS'; export NLS_DATE_FORMAT 
ORATAB=/var/opt/oracle/oratab;export ORATAB 
PATH=$PATH:$ORACLE_HOME:$ORACLE_HOME/bin:/usr/ccs/bin:/bin:/usr/bin:/usr/sbin:/sbin:/usr/openwin/bin:/opt/bin:.; export PATH 
DBALIST="[email protected],[email protected]";export DBALIST 
sqlplus -s '/ as sysdba' <<EOF 
set feed off 
set linesize 100 
set pagesize 200 
column "USED (MB)" format a10 
column "FREE (MB)" format a10 
column "TOTAL (MB)" format a10 
column PER_FREE format a10 
spool tablespace.alert 
SELECT F.TABLESPACE_NAME, 
TO_CHAR ((T.TOTAL_SPACE - F.FREE_SPACE),'999,999') "USED (MB)", 
TO_CHAR (F.FREE_SPACE, '999,999') "FREE (MB)", 
TO_CHAR (T.TOTAL_SPACE, '999,999') "TOTAL (MB)", 
TO_CHAR ((ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)),'999')||' %' PER_FREE 
FROM ( 
SELECT TABLESPACE_NAME, 
ROUND (SUM (BLOCKS*(SELECT VALUE/1024 
FROM V\$PARAMETER 
WHERE NAME = 'db_block_size')/1024) 
) FREE_SPACE 
FROM DBA_FREE_SPACE 
GROUP BY TABLESPACE_NAME 
) F, 

SELECT TABLESPACE_NAME, 
ROUND (SUM (BYTES/1048576)) TOTAL_SPACE 
FROM DBA_DATA_FILES 
GROUP BY TABLESPACE_NAME 
) T 
WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME 
AND (ROUND ((F.FREE_SPACE/T.TOTAL_SPACE)*100)) < 80; 
spool off 
exit 
EOF 
if [ `cat tablespace.alert|wc -l` -gt 0 ] 
then 
cat tablespace.alert > tablespace.tmp 
mailx -s "TABLESPACE  ALERT  for  PPRD10" $DBALIST < tablespace.tmp 
fi 

解决方案 »

  1.   

    我根据下面的脚本,能输出数据,MAILS命令能发到我的邮件服务器上面,但是如果只跑脚本只能输出结果,而不能吧结果发到我邮件服务器上面~!这句什么意思,到底运行脚本后能不能发到服务器上?
      

  2.   

    运行脚本后,能出现结果但是不能把结果通过E-MAIL的方式发到邮件服务器上,如果跑MAILX -S命令可以发邮件到邮件服务器上
      

  3.   

    if [ `cat tablespace.alert|wc -l` -gt 0 ];
    then 
    cat tablespace.alert > tablespace.tmp ;
    mailx -s "TABLESPACE ALERT for PPRD10" $DBALIST < tablespace.tmp 
    fi 补2个;试试
      

  4.   


    汗,这是我整理的脚本,脚本是没有问题的。 里面还是我的邮箱,肯定是sendmail 服务器没有配好。 默认是只能发内网邮箱地址。 发外网需要单独配置。 
      

  5.   

    但楼主不是说了直接mail -s能行吗
      

  6.   

    他能生成TABLESPACE.TMP,但是不能发邮件,但是单独跑MAILX -S这么命令可以发
      

  7.   

    单独执行 mailx -s "TABLESPACE ALERT for PPRD10" $DBALIST < tablespace.tmp 
    可以成功发送是吗?那就是这部分的问题嘛:
    if [ `cat tablespace.alert|wc -l` -gt 0 ] 
    then 
    cat tablespace.alert > tablespace.tmp 
    mailx -s "TABLESPACE ALERT for PPRD10" $DBALIST < tablespace.tmp 
    fi 可能我给你多加了个分号,只在if[  ]加一个试试:
    if [ `cat tablespace.alert|wc -l` -gt 0 ];
    then 
    cat tablespace.alert > tablespace.tmp 
    mailx -s "TABLESPACE ALERT for PPRD10" $DBALIST < tablespace.tmp 
    fi 
      

  8.   

    分开执行就可以,就是先生成一个TMP文件,然后再用一个脚本吧那个TMP文件发出邮件服务器就可以~!要分开
      

  9.   

    你单独执行这看能成功发送吗
    if [ `cat tablespace.alert|wc -l` -gt 0 ]
    then 
    cat tablespace.alert > tablespace.tmp 
    mailx -s "TABLESPACE ALERT for PPRD10" $DBALIST < tablespace.tmp 
    fi 
      

  10.   

    好似没有生成那个TMP文件,我ls -l看不到TMP文件
      

  11.   

    你的意思的说你那段代码放一起的话只能执行到这一步为止吗? 只剩最后一句mailx过不去?
    if [ `cat tablespace.alert|wc -l` -gt 0 ]
    then 
    cat tablespace.alert > tablespace.tmp  
      

  12.   

    。就是说  那一大段代码,去掉mailx那句的话,一切正常?
      

  13.   

    那你把mailx这句从if   fi里分离出来,放到外面,试试
      

  14.   

    应该不关权限的问题吧~!我分开2个脚本就可以~!CK_TBSP.SH可以生存报告,然后TEST2来跑MAILX -L那个命令可以发
      

  15.   

    我注释了IF 和FI等语句~!只留了MAIL ....那句~!还是一样
      

  16.   

    但合一起就不行,这总有原因吧
    对啊~!就是奇怪~!是不是SH脚本FOR操作系统不一样呢?我的是SUNOS脚本FOR LINUX
      

  17.   

    我问下,tablespace.alert有内容的前提下,单独把这段拿出来执行是正常成功发送的吗?
    if [ `cat tablespace.alert|wc -l` -gt 0 ] 
    then 
    cat tablespace.alert > tablespace.tmp 
    mailx -s "TABLESPACE ALERT for PPRD10" $DBALIST < tablespace.tmp 
    fi 
      

  18.   

    这代码注释里标示了是在 ksh下写的,你现在用的是什么shell?
      

  19.   

    单独
    if [ `cat tablespace.alert|wc -l` -gt 0 ] 
    then 
    cat tablespace.alert > tablespace.tmp 
    fi 
    和单独
    if [ `cat tablespace.alert|wc -l` -gt 0 ] 
    then 
    mailx -s "TABLESPACE ALERT for PPRD10" $DBALIST < tablespace.tmp 
    fi 都是成功的吗