У меня есть сценарий оболочки inotify
, который контролирует каталог и выполняет определенные команды, если поступает новый файл. Мне нужно превратить этот сценарий inotify
в параллельный процесс, чтобы выполнение сценария не выполнялосьдождитесь завершения процесса всякий раз, когда в каталог попадает несколько файлов.
Я пытался использовать nohup
, &
и xargs
для выполнения этой задачи. Но проблема была в том, что xargs
запускает тот же сценарий, что и ряд процессов, всякий раз, когда появляется новый файл, все запущенные процессы n пытаются обработать сценарий. Но, по сути, я хочу, чтобы только один из процессов обрабатывал новый файл в зависимости от того, что находится в режиме ожидания. Что-то вроде рабочего пула, какой бы рабочий ни был свободен или бездействующий пытается выполнить задачу.
Это мой сценарий оболочки.
#!/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, но в идеале я хочу, чтобы один из процессов выбрал эту задачу, которая когда-либо простаивает.
Пожалуйста, пролите свет на то, как подойти к этой проблеме?