Команда lsof linux для подсчета запущенных экземпляров со значениями аргументов

Я использую команду lsof для запуска только одного экземпляра setup.sh, и он работает нормально, если нет значений аргументов. Но мне нужно было передать аргументы в setup.sh, например,

setup.sh machine1 setup.sh machine2 setup.sh machine3

Таким образом, если setup.sh machine1 запущен и снова выполняется та же команда, он будет ждать, пока setup.sh machine1 завершит работу. Я думаю, что lsof для процесса и не может быть возможным, но есть ли другие хорошие предложения для логики ожидания?

Когда я пытаюсь передать некоторый аргумент, команда lsof выдает синтаксическую ошибку, я пробовал ниже, но не повезло. Моя цель - запустить только один экземпляр, используя machine1, и если кто-то попытается запустить setup.sh с аргументом machine1, он должен подождать. Любая другая логика блокировки / ожидания файла?

if ( [[ $(lsof -t \setup.sh 'machine1'| wc -l) > 1 ]] ); then
if ( [[ $(lsof -t '\setup.sh machine1'| wc -l) > 1 ]] ); then
if ( [[ $(lsof -t "\setup.sh machine1"| wc -l) > 1 ]] ); then

За работой:

if ( [[ $(lsof -t \setup.sh| wc -l) > 1 ]] ); then
   echo -e "\tWaiting for 2 minutes...\n"
   sleep 2m
else
   echo -e "\tFree now to run setup.sh\n"
fi

Не работает (синтаксическая ошибка):

if ( [[ $(lsof -t \setup.sh machine1| wc -l) > 1 ]] ); then
   echo -e "\tWaiting for 2 minutes...\n"
   sleep 2m
else
   echo -e "\tFree now to run setup.sh\n"
fi

2 ответа

Вы можете искать процессы с аргументами, используя ps -eo args как следующее.

ps -eo args | grep '^setup.sh machine1' | wc -l

Вам нужно изменить шаблон grep в соответствии с вашим случаем.

Вики Грега имеют отличную статью по управлению процессами, в частности, " Как сделать так, чтобы за один раз мог выполняться только один экземпляр моего скрипта?". lsof не является надежным способом гарантировать, что запущен только один процесс, потому что между проверкой вывода lsof и продолжаю. Если два процесса запускаются почти одновременно, вполне вероятно, что они будут работать параллельно.

Другие вопросы по тегам