我的脚本:
#!/bin/bash
. /home/was/.bash_profile
export PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/was/bin:/wasdata/oracle/10.2.0/client_1/bin:
sqlplus "mon_system/monsystem@10.10.4.90" <<eof
set echo off
set feedback off
set serveroutput on
set term off
set sqlprompt ""
set linesize 200
spool /wasdata/scripts/systeminf/tmp-was-restart.sh
exec prc_auto_restart
eof
sed -i '/prc_auto_restart/d' tmp-was-restart.sh
/wasdata/scripts/systeminf/tmp-was-restart.sh
cat /dev/null>/wasdata/scripts/systeminf/tmp-was-restart.sh
过程是:
- 登录数据库以执行过程“prc_auto_restart”
- 该程序将输出
/wasdata/scripts/systeminf/tmp-was-restart.sh
- 执行
/wasdata/scripts/systeminf/tmp-was-restart.sh
tmp-was-restart.sh 会喜欢:
ssh was1@10.10.4.212 "ps -ef|grep was1.*WebSphere.*c01_ship_s01|grep -v "grep">>kill.log;ps -ef|grep was1.*WebSphere.*c01_ship
_s01|grep -v "grep"|awk '{print \"kill -9 \" \$2}'|sh"
当我直接执行脚本时,脚本有效:
[was@web-tkt2-01 systeminf]$ ./prod-auto-restart.sh
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Aug 6 16:33:08 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
SQL> SQL> SQL> SQL> SQL> ssh -t -t was1@10.10.4.212 "ps -ef|grep was1.*WebSphere.*c01_ship_s01|grep -v "grep">>kill.log;ps -ef|grep was1.*WebSphere.*c01_ship_s01|grep -v "grep"|awk '{print \"kill -9 \" \$2}'|sh"
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
Connection to 10.10.4.212 closed.
[was@web-tkt2-01 systeminf]$
但是当我使用 nohup 执行脚本时:
[was@web-tkt2-01 systeminf]$ nohup prod-auto-restart.sh &
[1] 29983
[was@web-tkt2-01 systeminf]$ nohup: appending output to `nohup.out'
[1]+ Stopped nohup prod-auto-restart.sh
[was@web-tkt2-01 systeminf]$
[was@web-tkt2-01 systeminf]$
[was@web-tkt2-01 systeminf]$ ps -ef|grep autp
was 30014 27492 0 16:33 pts/4 00:00:00 grep autp
[was@web-tkt2-01 systeminf]$ ps -ef|grep auto
was 29983 27492 0 16:33 pts/4 00:00:00 /bin/bash prod-auto-restart.sh
was 30003 29983 0 16:33 pts/4 00:00:00 /bin/bash prod-auto-restart.sh
was 30021 27492 0 16:33 pts/4 00:00:00 grep auto
它将分叉两个shell,我检查tmp-was-restart.sh,它是正确的,这意味着命令sed -i '/prc_auto_restart/d' tmp-was-restart.sh
执行正确,它停止在/wasdata/scripts/systeminf/tmp-was-restart.sh
,我也尝试源/执行方法,两者都不起作用,在我杀死之后进程29983,命令/wasdata/scripts/systeminf/tmp-was-restart.sh
执行了,但是cat /dev/null>/wasdata/scripts/systeminf/tmp-was-restart.sh
没有执行,很迷茫!!!