【发布时间】:2020-04-03 19:22:55
【问题描述】:
我通过ssh登录了一个虚拟机,并尝试在后台运行一个脚本,脚本如下所示:
#!/bin/bash
APP_NAME=`basename $0`
CFG_FILE=$1
. $CFG_FILE #just some variables
CMD=$2
PID_FILE="$PIDS_DIR/$APP_NAME.pid"
CUR_LOG_DIR=$LOGS_RUNNING
echo $$ > $PID_FILE
#Main script code
#This script shall be called using the following syntax
# $ nohup script_name output_dir &
TIMESTAMP=`date +"%Y%m%d%H%M%S"`
CAP_INTERFACE="eth0"
/usr/sbin/tcpdump -nei $CAP_INTERFACE -s 65535 -w file_result
rm $PID_FILE
结果应该是 tcpdump 在后台运行,将命令结果重定向到 file_result。
脚本被调用:
nohup $SCRIPT_NAME $CFG_FILE start &
并且停止调用 STOP_SCRIPT:
##STOP_SCRIPT
PID_FILE="$PIDS_DIR/$APP_NAME.pid"
if [ -f $PID_FILE ]
then
PID=`cat $PID_FILE`
# send SIGTERM to kill all children of $PID
pkill -TERM -P $PID
fi
当我检查 file_result 时,运行停止脚本后,它是空的。
发生了什么?我该如何解决?
我找到了这个链接:https://it.toolbox.com/question/launching-tcpdump-processes-in-background-using-ssh-060614
作者似乎也遇到过类似的问题。他们争论比赛条件,但我没有完全理解。
【问题讨论】:
-
不,它没有。但它应该可以工作,传递的命令不会改变任何东西。
-
脚本是用'&'字符调用的,我忘了。我会更新问题。