Я вошел в виртуальную машину через 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
Когда я проверяю файл_результата после запуска сценария остановки, он пуст.
Что случилось? Как я могу это решить?
Я нашел эту ссылку: https://it.toolbox.com/question/launching-tcpdump-processes-in-background-using-ssh-060614
Похоже, автор столкнулся с похожей проблемой. Они спорят об условиях гонки, но я не совсем понял.