簡體   English   中英

具有停止/啟動選項的Linux bash腳本

[英]Linux bash script with stop/start option

我開發了一個腳本,該腳本通過給定的PID(作為參數)查找正在運行的線程數。 我們可以運行一次,一切運行完美。 但是,對於我們的需要,我必須使其與開始和停止選項一起運行。 意思是,直到我沒有讓它停止腳本周記錄線程號。 我試圖在下面的代碼中這樣做,但似乎沒有運氣

PID=$1
Command=$2
scriptPID=`echo $$`
#going to check if arguments were supplied if not using the defaults. if only one argument supplied then aborting.
if [[ $PID -eq 0 ]]
        then
                 echo -e "\n[ERROR]: No PID was provided. please provide PID as argument.\n"
                 exit 1
fi
initCommand(){
       #local Command="$2";
       case $Command in
              start)
                     start "true"
                     ;;
              stop)
                     stop -f "true"
                                        ;;
       esac
}
start(){
#going redirect stout & stderr to log file
echo "starting"
echo "script PID $scriptPID"
exec 1>>pidThreadNumber.log 2>&1
while (true); do
runningThreads=`ps huH p $PID | wc -l`
date;
echo "-------------------------------"
echo -e "Number of running threads: "$runningThreads"\n\n" 
sleep 2
done
}
stop()
{
kill -9 $scriptPID
}
initCommand $Command

謝謝大家的幫助

這是行不通的,因為每次執行命令時,您都有一個不同的進程,因此會有一個不同的scriptPID。 因此,您可以:

  • 將進程的pid存儲在一個文件中,您可以在該文件中再次找到它並使用它來殺死它

  • 通過使用ps查看所有進程並選擇正確的名稱來搜索要殺死的進程。

在OP澄清后添加 您可以實現腳本的“守護程序模式”。 一種方法是接受-d選項,在這種情況下,在后台運行腳本本身(不帶-d !),將子IP地址寫入文件,然后退出。 然后,您可以從文件中讀取IP,以稍后阻止該孩子。

暫無
暫無

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

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