gpt4 book ai didi

bash - 如何将 Inotify shell 脚本作为异步进程运行

转载 作者:行者123 更新时间:2023-12-04 15:39:48 27 4
gpt4 key购买 nike

我有一个 inotify监视目录并在新文件进入时执行某些命令的 shell 脚本。我需要做这个 inotify脚本进入并行化进程,因此只要有多个文件进入目录,脚本的执行就不会等待进程完成。

我试过使用 nohup , &xargs来完成这个任务。但问题是,xargs运行与多个进程相同的脚本,每当有新文件进入时,所有正在运行的 n 个进程都会尝试处理该脚本。但基本上我只希望其中一个进程处理空闲的新文件。像工作池这样的东西,无论是空闲还是空闲的工作人员都会尝试执行任务。

这是我的shell脚本。

#!/bin/bash
# script.sh
inotifywait --monitor -r -e close_write --format '%w%f' ./ | while read FILE

do
echo "started script";
sleep $(( $RANDOM % 10 ))s;
#some more process which takes time when a new file comes in
done

我确实尝试使用 xargs => 执行这样的脚本 xargs -n1 -P3 bash sample.sh
所以每当一个新文件进来时,它都会因为 P3 而被处理三次,但理想情况下我希望其中一个进程选择这个空闲的任务。

请阐明如何解决这个问题?

最佳答案

没有理由拥有空闲进程池。当您看到新文件出现时,只需为每个新文件运行一个。

#!/bin/bash
inotifywait --monitor -r -e close_write --format '%w%f' ./ |
while read -r file
do
echo "started script";
( sleep $(( $RANDOM % 10 ))s
#some more process which takes time when a new "$file" comes in
) &
done

注意添加 &和括号对 sleep 进行分组并将后续处理转换为单个子shell,然后我们可以将其作为后台处理。

另外,请注意我们总是更喜欢 read -rCorrect Bash and shell script variable capitalization

关于bash - 如何将 Inotify shell 脚本作为异步进程运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58178360/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com