Страница 1 из 1
					
				Как решить задачу-не запускать лишний процеcс.
				Добавлено: 2009-04-16 20:46:06
				 Гость
				Есть скрипт на базе rsync, который запускается по cron каждые 10 минут. Если размер файла большой и он не успевает скачаться за 10 мин, то запускается 2-я копия rsync (были случаи когда их висело порядка 30 штук.). Вопрос-как должна выглядеть строка (скрипт), которая проверяет наличие в процессах уже запущенного rsync и не давать запускаться новой копии rsync?
			 
			
					
				Re: Как решить задачу-не запускать лишний процеcс.
				Добавлено: 2009-04-16 20:49:20
				 paradox
				
			 
			
					
				Re: Как решить задачу-не запускать лишний процеcс.
				Добавлено: 2009-04-16 20:51:46
				 zg
				
			 
			
					
				Re: Как решить задачу-не запускать лишний процеcс.
				Добавлено: 2009-04-16 20:52:11
				 f_andrey
				по моему лучше создавать pid файл, ну и соответственно если он уже существует то не запускать последующие процессы.
			 
			
					
				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(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
В каком пакете он идет?
			 
			
					
				Re: Как решить задачу-не запускать лишний процеcс.
				Добавлено: 2009-04-17 9:32:37
				 f_andrey
				Гость писал(а):В каком пакете он идет?
Здесь на форуме по дефолту обсуждают FreeBSD, в иных случаях имейте совесть хоть вставлять uname.
А по тому где идет у меня например идет с системой /usr/bin/lockf (FreeBSD-CURRENT), или вы не можете найти к какому пакету пренадлежит файл в вашей системе 

 
			
					
				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