gpt4 book ai didi

shell - 检查程序是否正在使用 bash shell 脚本运行?

转载 作者:行者123 更新时间:2023-12-03 12:23:12 25 4
gpt4 key购买 nike

这是 bash 脚本的一个示例,它检查某个正在运行的进程(守护程序或服务)并在没有此类进程运行时执行特定操作(重新加载、发送邮件)。

check_process(){
# check the args
if [ "$1" = "" ];
then
return 0
fi

#PROCESS_NUM => get the process number regarding the given thread name
PROCESS_NUM='ps -ef | grep "$1" | grep -v "grep" | wc -l'
# for degbuging...
$PROCESS_NUM
if [ $PROCESS_NUM -eq 1 ];
then
return 1
else
return 0
fi
}

# Check whether the instance of thread exists:
while [ 1 ] ; do
echo 'begin checking...'
check_process "python test_demo.py" # the thread name
CHECK_RET = $?
if [ $CHECK_RET -eq 0 ]; # none exist
then
# do something...
fi
sleep 60
done

但是,它不起作用。我收到“错误:垃圾选项”。为 ps命令。这些脚本有什么问题?谢谢!

最佳答案

您几乎可以在 PROCESS_NUM 中实现一切使用这种单线:

[ `pgrep $1` ] && return 1 || return 0

如果您正在寻找 部分匹配 ,即程序名为 foob​​ar 你想要你的 $1只是 foo 您可以添加 -f switch到 pgrep:
[[ `pgrep -f $1` ]] && return 1 || return 0

将它们放在一起,您的脚本可以像这样重新编写:
#!/bin/bash

check_process() {
echo "$ts: checking $1"
[ "$1" = "" ] && return 0
[ `pgrep -n $1` ] && return 1 || return 0
}

while [ 1 ]; do
# timestamp
ts=`date +%T`

echo "$ts: begin checking..."
check_process "dropbox"
[ $? -eq 0 ] && echo "$ts: not running, restarting..." && `dropbox start -i > /dev/null`
sleep 5
done

运行它看起来像这样:
# SHELL #1
22:07:26: begin checking...
22:07:26: checking dropbox
22:07:31: begin checking...
22:07:31: checking dropbox

# SHELL #2
$ dropbox stop
Dropbox daemon stopped.

# SHELL #1
22:07:36: begin checking...
22:07:36: checking dropbox
22:07:36: not running, restarting...
22:07:42: begin checking...
22:07:42: checking dropbox

希望这可以帮助!

关于shell - 检查程序是否正在使用 bash shell 脚本运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7708715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com