Linux命令是什么来查找aa.sh进程是否正在运行。 ps 命令似乎不起作用,并且不显示 shell 脚本名称。
请指教。
检查这个
ps aux | grep "aa.sh"
最简单、最高效的一体化解决方案是:
pgrep -fl aa.sh
或作为条件:
if pgrep -fl aa.sh &>/dev/null; then
do...
fi
添加上面的答案 -
要在脚本中使用,请使用以下命令:-
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
上述解决方案非常适合交互式使用,您可以通过这种方式查看结果并消除误报。
如果可执行文件本身恰好匹配,或者任何非脚本名称的参数匹配,则可能会出现误报 - 对于没有文件扩展名的脚本,这种可能性更大。
这是一个更强大的脚本解决方案,使用shell函数:
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
-i
添加到 pgrep
调用以使其区分大小写in;在 Linux 上,这不是一个选项。)getscript
函数还适用于包含文件名部分的完整或部分路径;部分路径不得以 /
开头,并且指定的每个组件都必须完整。指定的路径越“完整”,误报的风险就越低。 警告:仅当使用路径调用脚本时,路径匹配才会起作用 - 这对于直接调用 $PATH 中的脚本通常是正确的。ps
和pgrep
都没有反映应用于命令行的原始引用。所有函数保证的是任何匹配都不是第一个标记(即解释器),并且它作为一个单独的单词出现,可以选择在前面加上一个路径。
最小化误报风险的另一种方法可能是匹配“可执行文件”名称(即解释器,例如bash
)——假设它是已知的;例如
# List instance(s) of a running *bash* script.
getbashscript() {
pgrep -lf "(^|/)bash( | .*/)$1( |\$)"
}
如果您愿意做出进一步的假设 - 例如脚本解释器路径从不包含嵌入空格 - 正则表达式可以变得更加严格,从而进一步降低误报的风险。ps -ef | grep shellscripname.sh
您还可以在
ps -ef
pgrep -f aa.sh
要使用 id 执行某些操作,请通过管道传输它。在这里我杀死了它的所有子任务。
pgrep aa.sh | xargs pgrep -P ${} | xargs kill
pgrep aa.sh && echo Running
我受到 mklement0 最后一个答案的启发 - 我每次重新启动时都会通过
/etc/crontab
scripts.sh
文件执行此
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
这里有一个快速脚本来测试 shell 脚本是否正在运行
#!/bin/sh
scripToTest="your_script_here.sh"
scriptExist=$(pgrep -f "$scripToTest")
[ -z "$scriptExist" ] && echo "$scripToTest : not running" || echo "$scripToTest : runnning"
ps -A | grep "myshellscript.sh"
查看