У меня есть сценарий, который я хочу использовать только один раз. Если скрипт вызывается во второй раз, я проверяю, существует ли файл блокировки. Если файл блокировки существует, я хочу посмотреть, действительно ли процесс запущен.Определение, выполняется ли процесс с помощью pgrep
Я возиться с pgrep, но я не получаю ожидаемых результатов:
#!/bin/bash
COUNT=$(pgrep $(basename $0) | wc -l)
PSTREE=$(pgrep $(basename $0) ; pstree -p $$)
echo "###"
echo $COUNT
echo $PSTREE
echo "###"
echo "$(basename $0) :" `pgrep -d, $(basename $0)`
echo sleeping.....
sleep 10
Результаты я получаю являются:
$ ./test.sh
###
2
2581 2587 test.sh(2581)---test.sh(2587)---pstree(2591)
###
test.sh : 2581
sleeping.....
Я не понимаю, почему я m получает «2», когда выполняется только один процесс.
Любые идеи? Я уверен, что так я его называю. Я пробовал несколько разных комбинаций и не могу понять, как это понять.
РЕШЕНИЕ:
То, что я в конечном итоге делает делает это (часть моего сценария):
function check_lockfile {
# Check for previous lockfiles
if [ -e $LOCKFILE ]
then
echo "Lockfile $LOCKFILE already exists. Checking to see if process is actually running...." >> $LOGFILE 2>&1
# is it running?
if [ $(ps -elf | grep $(cat $LOCKFILE) | grep $(basename $0) | wc -l) -gt 0 ]
then
abort "ERROR! - Process is already running at PID: $(cat $LOCKFILE). Exitting..."
else
echo "Process is not running. Removing $LOCKFILE" >> $LOGFILE 2>&1
rm -f $LOCKFILE
fi
else
echo "Lockfile $LOCKFILE does not exist." >> $LOGFILE 2>&1
fi
}
function create_lockfile {
# Check for previous lockfile
check_lockfile
#Create lockfile with the contents of the PID
echo "Creating lockfile with PID:" $$ >> $LOGFILE 2>&1
echo -n $$ > $LOCKFILE
echo "" >> $LOGFILE 2>&1
}
# Acquire lock file
create_lockfile >> $LOGFILE 2>&1 \
|| echo "ERROR! - Failed to acquire lock!"
Вставить вывод '$ ps -elf | grep processname' для процесса. –
Как младшая кодировка nit, '[\' grep something | wc -l \ '-gt 0]' можно упростить только в 'grep something'. См. Далее http://partmaps.org/era/unix/award-example-backticks.html – tripleee
Спасибо triplee. Так вы говорите, для этого: если [$ (п.с. -elf | Grep $ (кошка $ LockFile) | Grep $ ($ 0 базовое) | туалет -l) -gt 0] Замены для этого: , если [ $ (ps -elf | grep $ (cat $ LOCKFILE) | grep $ (basename $ 0))] Я правильно понял вас? – jared