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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2009-04-16 20:46:06

Есть скрипт на базе rsync, который запускается по cron каждые 10 минут. Если размер файла большой и он не успевает скачаться за 10 мин, то запускается 2-я копия rsync (были случаи когда их висело порядка 30 штук.). Вопрос-как должна выглядеть строка (скрипт), которая проверяет наличие в процессах уже запущенного rsync и не давать запускаться новой копии rsync?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/


zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2009-04-16 20:51:46

Код: Выделить всё

pgrep rsync > /dev/null && exit

Аватара пользователя
f_andrey
майор
Сообщения: 2651
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

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

Непрочитанное сообщение f_andrey » 2009-04-16 20:52:11

по моему лучше создавать pid файл, ну и соответственно если он уже существует то не запускать последующие процессы.
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308

Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2009-04-16 21:08:42

Создавать PID - не сложновато будет для cronа, сначало создать, затем очистить?
В принципе pgrep rsync > /dev/null && exit будет достаточно.

Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2009-04-17 2:32:39

lockf(1)

Код: Выделить всё

lockf -t0 /tmp/.mylock rsync foo dest::
lockf(1) писал(а):-t seconds
...
A timeout of 0 may be given, in which case lockf will fail unless it can acquire the lock immediately. When a lock times out, command is not executed.

Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2009-04-17 9:22:30

Debian
lockf: command not found

apt-cache search lockf
checksecurity - basic system security checks
chiark-utils-bin - chiark system administration utilities
cron - management of regular background processing
liblockfile-dev - Development library for liblockfile.
liblockfile-simple-perl - Simple advisory file locking
liblockfile1 - NFS-safe locking library, includes dotlockfile program
libpam-foreground - create lockfiles describing which users own which console
libposixlock-ruby - posix locking for ruby
libposixlock-ruby1.8 - posix locking for ruby
lockfile-progs - Programs for locking and unlocking files and mailboxes
nwall - version of wall that uses GNU readline
python-myghtyutils - Set of utility classes used by Myghty templating
sendmail - powerful, efficient, and scalable Mail Transport Agent
sendmail-bin - powerful, efficient, and scalable Mail Transport Agent

В каком пакете он идет?

Аватара пользователя
f_andrey
майор
Сообщения: 2651
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

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

Непрочитанное сообщение f_andrey » 2009-04-17 9:32:37

Гость писал(а):В каком пакете он идет?
Здесь на форуме по дефолту обсуждают FreeBSD, в иных случаях имейте совесть хоть вставлять uname.
А по тому где идет у меня например идет с системой /usr/bin/lockf (FreeBSD-CURRENT), или вы не можете найти к какому пакету пренадлежит файл в вашей системе :oops:
Если ваша тема перенесена, то смотри http://forum.lissyara.su/viewtopic.php?f=1&t=32308

Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2009-04-17 19:31:33

Ну так в самом начале специально написал - Debian, если надо uname: Linux 2.6.26-1-686, Lenny.
Самостоятельного файла в системе нет, он идет в компекте с каким-то пакетом, список которых привел выше. Не ставить же их все сразу.

Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2009-04-18 0:06:41

Гость писал(а):Самостоятельного файла в системе нет, он идет в компекте с каким-то пакетом, список которых привел выше. Не ставить же их все сразу.
ставь по очереди пока не найдешь нужный по функционалу как lockf(1)

а так можно использовать .pid-файлы как замену файловым lock'ам

Код: Выделить всё

#! /bin/sh
# crontab(5) example:
#     */10 * * * * root block routine rsync foo dest::

name=${1:?usage: ${0##*/} name command}
pidfile=/tmp/$name.pid

shift
read 2>/dev/null <$pidfile pid

# launch command if another instance isn't alive anymore
if ! ps -p $pid >&- 2>&-; then
    eval "$@" &
    echo >$pidfile $!
fi
где внешних команд всего две: ps (для проверки жив ли процесс) и rsync (command).

Код: Выделить всё

$ block
usage: block name command
$ block yesflood yes \>/dev/null
$ ps -lp$(pgrep yes)
  UID   PID  PPID CPU PRI NI   VSZ   RSS MWCHAN STAT  TT       TIME COMMAND
 1001 29651 29650   0 118  0  4748   796 -      R      6    0:59.63 yes
$ block yesflood yes \>/dev/null
  UID   PID  PPID CPU PRI NI   VSZ   RSS MWCHAN STAT  TT       TIME COMMAND
 1001 29651 29650   0 118  0  4748   796 -      R      6    1:18.68 yes
$ cat /tmp/yesflood.pid
29650

Гость
проходил мимо

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

Непрочитанное сообщение Гость » 2009-04-18 18:40:19

Посмотрел как реализован запуск системных скриптов, решил остановиться на start-stop-daemon. Единственный вопрос: как прописать параметры (пути и ключи, после --exec $DAEMON) rsync в этом скрипте или сослаться на файл конфигурации, где они будут прописанны?

Код: Выделить всё

 
DAEMON=/usr/bin/rsync 
start-stop-daemon --start --oknodo --quiet --pidfile $PIDFILE --make-pidfile --background --exec $DAEMON  > /dev/null