Linux каманды, каб праверыць, калі сцэнар абалонкі працуе ці няма

Што такое каманда Linux, каб знайсці, калі працэс сказаць aa.sh працуе ці не. Каманда пса, здаецца, не працуе, і ён не паказвае імёны сцэнарыяў абалонкі.

Калі ласка, парайце.

19
<�Код> пс -п.в паказвае SCRIPTNAME для мяне.
дададзена аўтар nims, крыніца
Або pidof , каб проста атрымаць PID.
дададзена аўтар tripleee, крыніца
<�Код> пс Окс | Grep имяскрипта або pgrep имяскрипта
дададзена аўтар Basile Starynkevitch, крыніца

8 адказы

Самае простае рашэнне:

pgrep -fl aa.sh
23
дададзена
@tutuDajuju: карыснае, дзякуй; невялікі датычнай: гэта варта звярнуць больш канкрэтная ўвага да паслугі вы спасылаецеся на: explainshell.com можа аналізаваць адвольную камандны радок Unix і растлумачыць канкрэтныя параметры, якія выкарыстоўваюцца, заснаваныя на старонках чалавека Ubuntu. Вось відавочны URL растлумачыць гэты адказ: explainshell.com/explain?cmd= pgrep + -fl + aa.sh
дададзена аўтар mklement0, крыніца
калі хто-небудзь задаваўся пытаннем, што гэта робіць, бачыць гэта растлумачыў
дададзена аўтар tutuDajuju, крыніца

Праверце гэта

ps aux | grep "aa.sh"
21
дададзена
Мы можам выкарыстоўваць трук, каб прадухіліць Grep паказваючы сябе: пс Окс | Grep "[а] a.sh"
дададзена аўтар Vassilis, крыніца
Гэта можа даць вам некалькі сюрпрызаў, дазвольце мне даць вам два прыклады, у той жа час. Па-першае: ён знойдзе «aaa.sh», а таксама, што можа прывесці да памылак. Па-другое, Grep апынецца, што вам даводзіцца мець справу з. Pgrep гэта элегантнае рашэнне.
дададзена аўтар user897079, крыніца

Даданне да вышэй адказаў -

Каб выкарыстоўваць у скрыпце, выкарыстоўвайце наступнае: -

result=`ps aux | grep -i "myscript.sh" | grep -v "grep" | wc -l`
if [ $result -ge 1 ]
   then
        echo "script is running"
   else
        echo "script is not running"
fi
4
дададзена
адзін для сцэнарыя і адзін для самога Grep. калі вы паспрабуеце PS AUX | Grep прывітанне у тэрмінале, вы ўбачыце Grep як працэс. Каб прадухіліць Grep праяўляльнай я выкарыстоўваю трук: PS AUX | Grep [ч] ELLO
дададзена аўтар Vassilis, крыніца
Калі я запускаю пс Окс | Grep -i "myscript.sh" | Grep -v "Grep" | туалет -l адзін, выхад роўны 0. Калі я запускаю яго ў маім сцэнары, вынік 2 і сцэнар завяршаецца. Любыя прапановы, што не так?
дададзена аўтар Ahue, крыніца

Праверце гэта

ps -ef | grep shellscripname.sh

Вы таксама можаце знайсці запушчаны працэс у

ps -ef
3
дададзена

Рашэння вышэй вялікія для інтэрактыўнага выкарыстання, дзе вы можаце вочны яблык выніку і адсеяць ілжывыя спрацоўвання такім чынам.

Ілжывае спрацоўванне можа адбыцца, калі сам выкананы здараецца, каб адпавядаць, або якія-небудзь аргументы, якія не зьяўляюцца імёны сцэнарыяў супадаюць - верагоднасць больш з дапамогай скрыптоў, якія не маюць пашырэння імя файла.

Вось <�моцны> больш надзейны </моцны> рашэнне для <�моцны> сцэнарыяў </моцны>, выкарыстоўваючы <�моцны> абалонкі функцыю </моцны>:

getscript() {
  pgrep -lf ".[ /]$1( |\$)"
}

Прыклад выкарыстання:

# List instance(s) of script "aa.sh" that are running.
getscript "aa.sh"  # -> (e.g.): 96112 bash /Users/jdoe/aa.sh

# Use in a test:
if getscript "aa.sh" >/dev/null; then
  echo RUNNING
fi
  • Matching is case-sensitive (on OSX, you could add -i to the pgrep call to make it case-*in*sensitive; on Linux, that is not an option.)
  • The getscript function also works with full or partial paths that include the filename component; partial paths must not start with / and each component specified must be complete. The "fuller" the path specified, the lower the risk of false positives. Caveat: path matching will only work if the script was invoked with a path - this is generally true for scripts in the $PATH that are invoked directly.
  • Even this function cannot rule out all false positives, as paths can have embedded spaces, yet neither ps nor pgrep reflect the original quoting applied to the command line. All the function guarantees is that any match is not the first token (which is the interpreter), and that it occurs as a separate word, optionally preceded by a path.
  • Another approach to minimizing the risk of false positives could be to match the executable name (i.e., interpreter, such as bash) as well - assuming it is known; e.g.
# List instance(s) of a running *bash* script.
getbashscript() {
  pgrep -lf "(^|/)bash( | .*/)$1( |\$)"
}

Калі вы гатовыя зрабіць далейшыя здагадкі - напрыклад, скрыпт-інтэрпрэтатар шляху ніколі не ўтрымлівае прабелы - ў рэгулярныя выразы можна было б зрабіць больш абмежавальны характар ​​і тым самым яшчэ больш знізіць рызыку ілжывых спрацоўванняў.

1
дададзена
pgrep -f aa.sh 

Для таго, каб зрабіць што-то з ідэнтыфікатарам, вы перададзіце яго. Тут я забіць ўсіх яго даччыныя задачы.

pgrep aa.sh | xargs pgrep -P ${} | xargs kill

Калі вы хочаце, каб выканаць каманду, калі працэс запушчаны зрабіць гэта

pgrep aa.sh && echo Running
1
дададзена

Я быў вельмі натхнёны апошнім адказам на mklement0 - У мяне ёсць некалькі сцэнарыяў/маленькія праграм я бег пры кожнай перазагрузцы праз /і г.д./кронтаб . Я пабудаваў свой адказ і пабудаваў сцэнар ўваходу, які паказвае, калі мае праграмы ўсё яшчэ працуюць. Я выконваю гэта scripts.sh праз .profile -файла на кожным ўваходзе, каб атрымаць імгненнае апавяшчэнне аб кожным ўваходзе ў сістэму.

cat scripts.sh 
#!/bin/bash

getscript() {
  pgrep -lf ".[ /]$1( |\$)"
}

script1=keepalive.sh
script2=logger_v3.py

# test if script 1 is running
if getscript "$script1" >/dev/null; then
  echo "$script1" is RUNNING
  else
    echo "$script1" is NOT running
fi

# test if script 2 is running:
if getscript "$script2" >/dev/null; then
  echo "$script2" is RUNNING
  else
    echo "$script2" is NOT running
fi
1
дададзена

Дайце магчымасць для пса, каб адлюстраваць усе працэсы, прыклад можа служыць:

ps -A | grep "myshellscript.sh"

Праверце http://www.cyberciti.biz/faq/show -усе-пагонных-працэсы-в-Linux/ для атрымання дадатковай інфармацыі

І як Basile Starynkevitch згадваецца ў каментары pgrep іншае рашэнне.

0
дададзена