Добрый день.
Понадобилось организовать проверку работы демона с последующим запуском, при его отсутствии.
Ниже привожу скрипт.
#!/bin/bash
if ps -A | grep ices
then
echo "true"
killall ices && ices -c /etc/icecast2/ices.conf
else
`ices -c /etc/icecast2/ices.conf`
echo "false"
fi
Проблема собственно в том, что если демон запущен, то он благополучно килится и перезапускается, но если он не запущен, то вторая часть скрипта не запускается, т.е то что после else. Пробовал указывать полный путь до исполняемого файла, результат тот же. Курю маны по служебным символам баша, но как то пока безрезультатно, где я ошибся?
Может как-то так надо:
6.3 Пример: элементарный пример условного оператора if .. then ... else
#!/bin/bash
if [ "foo" = "foo" ]; then
echo-выражение вычислилось как истина
else
echo-выражение вычислилось как ложь
fi
Источнег.
Кавычки надо убрать в случае false и будет Вам счастье.
А не запускается, потому что `` в этом случае абсолютно лишние. Просто уберите их.
Форматирование ещё странное, но баш в этом плане не привередлив))
форматирование стандартное :)
В ИжГТУ, на первом курсе, когда учили(xD) паскаль и делфи - нас так учили оформлять код.
then
echo "true" # входим в ветвление, отступа нет
killall ices && ices -c /etc/icecast2/ices.conf
else
`ices -c /etc/icecast2/ices.conf`
echo "false" # мы всё ещё в ветвлении, отступ пропал
Вот стандартное:
if [ "$VGIT" == "$VOBS" ]
then
echo -e '\e[0;4m\nNo changes.\e[0m'
else
cd $DGIT
git log $VOBS..HEAD --date=raw --full-diff --name-only
cd $DOBS
# вырезал многабукаф
fi
#!/bin/bash
if ps -A | grep ices
then
echo "true"
killall ices && ices -c /etc/icecast2/ices.conf &
else
echo "false"
ices -c /etc/icecast2/ices.conf &
fi
#!/bin/bash
#сравните:
if [ 0 -gt 2 ]
then
#не исполняется
echo "nou"
else
`emacs` #к примеру
echo "yes" #не выводица
fi
# и
if [ 0 -gt 2 ]
then
#не исполняется
echo "nou"
else
emacs &
echo "yes" #выводица
fi
else
Зачем?..`emacs`
echo "yes" #не выводица
Не выводится, пока не будет завершён емакс, если он вообще будет запущен с этими кавычками.else
Тут всё красиво и логично, запускаем емакс в отдельном потоке.emacs &
echo "yes" #выводица
Спасибо всем и DarkneSS с lord_i в частности :) кавычки убрал, но скрипт заработал не сразу, был еще один косяк, на который я сразу не обратил внимания, а именно, файл скрипта назывался reices.sh ну и соответственно, условие всегда выполнялось потому что скрипт находил процесс с таким сочетанием :)
А про форматирование, я руководствовался больше удобством чтения.
Можно, кстати, попробовать реализовать по другому.
Ищем PID некоего процесса и записываем его в переменную.
Далее сравниваем, если значение переменной пустое - запускаем процесс, если нет - выходим из скрипта.
#!/bin/sh
SOME_VAR=$(pgrep pptpd)
set -x
if [ -z "$SOME_VAR" ]
then
echo "PPTPD not running."
service pptpd start
else
echo "PPTPD is running. PID:$SOME_VAR"
fi
Вместо PPTPD и действий вставить свой набор команд.
Можно и так, ices в свою базовую директорию пишет файлик с pid, так что его можно и от туда взять :)
Типа так
kill `cat /tmp/ices.pid`
Отправить комментарий