我正在使用 nohup 来运行脚本 inotify 命令,因为当我退出终端时 inotify 会停止,所以我希望脚本在后台运行。所以我像这样运行脚本
nohup /path/to/script.sh >/dev/null 2>&1 &
问题不是 nohup 每次由 inotify 创建新文件时都会创建新进程。我该如何避免这种情况或使用任何其他建议方法来完成我的任务。
我想在 backgorund 运行的脚本
#!/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"
答案1
您要么lock
等待前一个过程结束...要么您执行kill
前一个过程...如果没有有关script
您正在运行的详细信息...我们真的无法告诉您太多。
理想情况下,您的脚本会在某种循环中检查某些内容。如果有事情要做,它会执行,然后在每次迭代时进行某种休眠。有些事情没有正确结束。