我写了一个bash脚本来检查进程是否正在运行.它不起作用,因为ps命令总是返回退出代码1.当我从命令行运行ps命令时,$?是正确设置,但在脚本中它总是1.任何想法?
#!/bin/bash
SERVICE=$1
ps -a | grep -v grep | grep $1 > /dev/null
result=$?
echo "exit code: ${result}"
if [ "${result}" -eq "0" ] ; then
echo "`date`: $SERVICE service running, everything is fine"
else
echo "`date`: $SERVICE is not running"
fi
Run Code Online (Sandbox Code Playgroud)
Bash版本:GNU bash,版本3.2.25(1)-release(x86_64-redhat-linux-gnu)
And*_*dor 100
有一些非常简单的方法:
pgrep procname && echo Running
pgrep procname || echo Not running
killall -q -0 procname && echo Running
pidof procname && echo Running
Run Code Online (Sandbox Code Playgroud)
And*_*ers 14
在BASH版本3.2.29上试过你的版本,工作正常.但是,您可以执行上面提到的操作,例如:
#!/bin/sh
SERVICE="$1"
RESULT=`ps -a | sed -n /${SERVICE}/p`
if [ "${RESULT:-null}" = null ]; then
echo "not running"
else
echo "running"
fi
Run Code Online (Sandbox Code Playgroud)
and*_*yue 12
这招对我的作品.希望这可以帮到你.让我们将以下内容保存为checkRunningProcess.sh
#!/bin/bash
ps_out=`ps -ef | grep $1 | grep -v 'grep' | grep -v $0`
result=$(echo $ps_out | grep "$1")
if [[ "$result" != "" ]];then
echo "Running"
else
echo "Not Running"
fi
Run Code Online (Sandbox Code Playgroud)
使checkRunningProcess.sh可执行.然后使用它.
使用示例.
20:10 $ checkRunningProcess.sh proxy.py
Running
20:12 $ checkRunningProcess.sh abcdef
Not Running
Run Code Online (Sandbox Code Playgroud)
小智 9
我使用这个来检查每10秒进程正在运行,如果没有则启动并允许多个参数:
#!/bin/sh
PROCESS="$1"
PROCANDARGS=$*
while :
do
RESULT=`pgrep ${PROCESS}`
if [ "${RESULT:-null}" = null ]; then
echo "${PROCESS} not running, starting "$PROCANDARGS
$PROCANDARGS &
else
echo "running"
fi
sleep 10
done
Run Code Online (Sandbox Code Playgroud)
检查您的脚本名称是否不包含$ SERVICE.如果是,它将在ps结果中显示,导致脚本始终认为服务正在运行.您可以使用以下文件对当前文件名进行grep:
#!/bin/sh
SERVICE=$1
if ps ax | grep -v grep | grep -v $0 | grep $SERVICE > /dev/null
then
echo "$SERVICE service running, everything is fine"
else
echo "$SERVICE is not running"
fi
Run Code Online (Sandbox Code Playgroud)
小智 5
工作一个.
!/bin/bash
CHECK=$0
SERVICE=$1
DATE=`date`
OUTPUT=$(ps aux | grep -v grep | grep -v $CHECK |grep $1)
echo $OUTPUT
if [ "${#OUTPUT}" -gt 0 ] ;
then echo "$DATE: $SERVICE service running, everything is fine"
else echo "$DATE: $SERVICE is not running"
fi
尽管在bash中使用/ dev/null方法取得了一些成功.当我将解决方案推送到cron时,它失败了.检查返回命令的大小工作得很好.ampersrand允许bash退出.
#!/bin/bash
SERVICE=/path/to/my/service
result=$(ps ax|grep -v grep|grep $SERVICE)
echo ${#result}
if ${#result}> 0
then
echo " Working!"
else
echo "Not Working.....Restarting"
/usr/bin/xvfb-run -a /opt/python27/bin/python2.7 SERVICE &
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
198709 次 |
| 最近记录: |