Using nohup to execute command very confused?

2019-07-31 03:51发布

my script:

#!/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

The process is :

  1. login into database to execute a procedure "prc_auto_restart"
  2. the procedure will output the /wasdata/scripts/systeminf/tmp-was-restart.sh
  3. execute the /wasdata/scripts/systeminf/tmp-was-restart.sh

the tmp-was-restart.sh will like:

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" 

When i execute the script directly, the script works :

[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]$ 

But when i use nohup to execute the script:

[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

It will fork two shell, and i check the tmp-was-restart.sh, it was correct, and that mean the command sed -i '/prc_auto_restart/d' tmp-was-restart.sh execute correct,and it stoped at /wasdata/scripts/systeminf/tmp-was-restart.sh, I alse try source/execute method, both not work, after i kill the process 29983 ,the command /wasdata/scripts/systeminf/tmp-was-restart.sh executed, but the cat /dev/null>/wasdata/scripts/systeminf/tmp-was-restart.sh not executed, very confused!!!

标签: shell ssh nohup
1条回答
乱世女痞
2楼-- · 2019-07-31 03:57

The most common reason for the Stopped message is that the script is expecting input from the user via the command line, usually a read command. I don't see any in the code you posted, so if there are any child scripts not visible, check there for read. Much less likely is that the script has received a 'Ctrl-S' (stop) character or ? Signal.

Your usage of sqlplus looks correct, but I don't have access to sqlplus to test any theories, so double check the documentation for cmd-line usage of sqlplus, maybe there a an -n option (OR other) to indicate 'no cmd-line interaction' .

Finally, maybe shell debugging mode can help you.

Try PS4='$LINENO>'; set -vx near top of script. It takes a little learning to figure out how to read the output. The -v options displays block of code being evaluated, either an if .. ; then ; ... else ; ... fi,, or while ... done or just a single pipeline.

I hope this helps.

P.S. as you appear to be a new user, if you get an answer that helps you please remember to mark it as accepted, and/or give it a + (or -) as a useful answer.

查看更多
登录 后发表回答