簡體   English   中英

lsof linux命令用參數值對正在運行的實例進行計數

[英]lsof linux command to count running instances with argument values

我正在使用lsof命令僅運行setup.sh的一個實例,如果沒有參數值,則可以正常運行。 但是,我需要在setup.sh中傳遞參數,例如

setup.sh機器1 setup.sh機器2 setup.sh機器3

因此,如果setup.sh machine1正在運行,並且再次運行相同的命令,它將等到setup.sh machine1完成。 我認為lsof是用於過程的,也許不可能,但是對於等待邏輯還有其他好的建議嗎?

當我嘗試傳遞某些參數lsof命令給出語法錯誤時,我在下面嘗試了但沒有運氣。 我的目的是僅使用machine1運行一個實例,如果有人嘗試使用machine1參數運行setup.sh,則它應該等待。 還有其他文件鎖定/等待邏輯嗎?

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

您可以使用ps -eo args搜索帶有參數的進程,如下所示。

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

您需要更改grep模式以適合您的情況。

Greg的Wiki有一篇關於過程管理的精彩文章,特別是“ 如何確保一次只能運行一個腳本副本? ”。 lsof不是保證僅一個進程正在運行的可靠方法,因為在檢查lsof的輸出與繼續之間存在競爭狀態。 如果兩個進程幾乎同時啟動,則它們很可能會並行運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM