Ru-Board.club
← Вернуться в раздел «UNIX»

» Как решить задачу-не запускать лишний процесс.

Автор: digital422
Дата сообщения: 16.04.2009 19:51
Есть скрипт на базе rsync, который запускается по cron каждые 10 минут. Если размер файла большой и он не успевает скачаться за 10 мин, то запускается 2-я копия rsync (были случаи когда их висело порядка 30 штук.). Вопрос-как должна выглядеть строка (скрипт), которая проверяет наличие в процессах уже запущенного rsync и не давать запускаться новой копии rsync?
Автор: AnDySs1
Дата сообщения: 16.04.2009 20:46
http://forum.shelek.ru/index.php/topic,12405.0.html
Автор: digital422
Дата сообщения: 16.04.2009 21:04
Там на php, сложновато.
Первую строчку вроде написал, PID выдает (если запущен):
ps aux | grep rsync | awk '{print $2}', осталось сделать сравнение, если есть PID то не запускать, если есть, то выход.
Автор: SysCommander
Дата сообщения: 16.04.2009 21:54

Цитата:
Вопрос-как должна выглядеть строка (скрипт), которая проверяет наличие в процессах уже запущенного rsync и не давать запускаться новой копии rsync?


грепать на наличие rsync - ложный путь
теоретически возможно присутствие нескольких процессов rsync, некоторые могут быть запущены не из твоего скрипта

ориентироваться надо на сам скрипт, который выполняется из cron, а не на rsync, который вызывается внутри скрипта
Автор: digital422
Дата сообщения: 17.04.2009 09:31
Теоретически согласен, может быть несколько rsyncов, от разных скриптов, но у меня только один скрипт порождает rsync. В списке процессов вижу только ssh и rsync, имени самого скрипта (запускаемого cron) нет, видимо неправильно его написал.
Автор: Nike000
Дата сообщения: 17.04.2009 12:55
что мешает создавать lock файл из скрипта, и проверять его наличие?
а в концуе скрипта чистить.
можно даже проверять, что файл не слишком старый, например, если предыдущий процесс завис или комп был перегружен в процессе работы
Автор: digital422
Дата сообщения: 17.04.2009 19:46
что мешает создавать lock файл из скрипта, и проверять его наличие?
Отсутствие опыта написания подобных вещей.
Автор: FuzzyLogic
Дата сообщения: 17.04.2009 22:54
digital422
ну куда там проще?


Код:
#!/bin/bash
# смотрим есть ли "lockfile"
if [ -e .running] ; then
echo " process already running"
exit
fi

# создаём lockfile
touch .running

# активно что-то там работаем.....
................................................
................................................
................................................


# поработали, удаляем lockfile
rm -f .running
Автор: digital422
Дата сообщения: 18.04.2009 16:23
Сделал вот так, вроде работает, есть ли замечания?

#!/bin/sh

DAEMON=/script/rsync-config.sh
NAME=rsync
PIDFILE=/var/run/$NAME/$NAME.pid
DESC="rsync daemon"
PATH_N=/script/rsync-check-script

test -x $DAEMON || exit 0

. /lib/lsb/init-functions

case "$1" in
start)
log_daemon_msg "Starting $DESC"
if [ -s /var/run/rsync/rsync.pid ] && kill -0 $(cat /var/run/rsync/rsync.pid) >/dev/null 2>&1; then
log_failure_msg "rsync daemon failed to start"
log_end_msg 1
exit 0
fi
start-stop-daemon --start --oknodo --quiet \
--pidfile $PIDFILE --make-pidfile --background --exec $DAEMON > /dev/null
log_end_msg "$?"
;;
stop)
log_daemon_msg "Stopping $DESC"
start-stop-daemon --stop --oknodo --quiet \
--exec $DAEMON --pidfile $PIDFILE
log_end_msg "$?"
;;
*)
N=$PATH_N
echo "Usage: $N {start|stop}" >&2
exit 1
;;
esac

exit 0

Страницы: 1

Предыдущая тема: Установка Open Office 3.0


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.