Вы можете достичь почти всего за PROCESS_NUM
с помощью этого однострочного:
[ `pgrep $1` ] && return 1 || return 0
если вы ищете частичное совпадение , т.е. программа называется foobar и вы хотите, чтобы ваш $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
Надеюсь, это поможет!