Я использую nohup для команды запуска сценария inotify, потому что inotify останавливается, когда я выхожу из терминала, поэтому я хочу, чтобы сценарий запускался в фоновом режиме. поэтому я запускаю сценарий вот так
nohup /path/to/script.sh >/dev/null 2>&1 &
проблема не в том, что nohup создает новый процесс каждый раз, когда новый файл создается inotify. как я могу избежать этого или любого другого метода предложения для выполнения моей задачи.
сценарий, который я хочу запустить на заднем плане
#!/bin/sh
DIR="/opt/data/"
EVENTS="moved_to"
FIFO="/tmp/inotify2.fifo"
on_event() {
local date=$1
local time=$2
local file=$3
sleep 5
/opt/nfdump/bin/nfdump -qr "$DIR""$file" -o extended | perl -i -p -e 'use Socket; s#(\d{1,3}(\.\d{1,3}){3})\b#gethostbyaddr(inet_aton($1),AF_INET) or sprintf($1)#egi' > /opt/nfdump-ascii/nfdump-ascii."$date"."$time".log
}
# MAIN
if [ ! -e "$FIFO" ]
then
mkfifo "$FIFO"
fi
inotifywait -m -e "$EVENTS" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %f' "$DIR" > "$FIFO" &
INOTIFY_PID=$!
while read date time file
do
on_event $date $time $file &
done < "$FIFO"
ты либо lock
и дождитесь завершения предыдущего процесса ... или вы kill
предыдущий процесс ... Без подробностей о script
вы бежите ... Мы не можем сказать вам много.
В идеале ваш сценарий должен проверять что-то в каком-то цикле. Если бы нужно было что-то сделать, он бы это делал, а затем на каждой итерации как бы засыпал. Что-то не заканчивается должным образом.