Есть скрипт на базе rsync, который запускается по cron каждые 10 минут. Если размер файла большой и он не успевает скачаться за 10 мин, то запускается 2-я копия rsync (были случаи когда их висело порядка 30 штук.). Вопрос-как должна выглядеть строка (скрипт), которая проверяет наличие в процессах уже запущенного rsync и не давать запускаться новой копии rsync?
» Как решить задачу-не запускать лишний процесс.
Там на php, сложновато.
Первую строчку вроде написал, PID выдает (если запущен):
ps aux | grep rsync | awk '{print $2}', осталось сделать сравнение, если есть PID то не запускать, если есть, то выход.
Первую строчку вроде написал, PID выдает (если запущен):
ps aux | grep rsync | awk '{print $2}', осталось сделать сравнение, если есть PID то не запускать, если есть, то выход.
Цитата:
Вопрос-как должна выглядеть строка (скрипт), которая проверяет наличие в процессах уже запущенного rsync и не давать запускаться новой копии rsync?
грепать на наличие rsync - ложный путь
теоретически возможно присутствие нескольких процессов rsync, некоторые могут быть запущены не из твоего скрипта
ориентироваться надо на сам скрипт, который выполняется из cron, а не на rsync, который вызывается внутри скрипта
Теоретически согласен, может быть несколько rsyncов, от разных скриптов, но у меня только один скрипт порождает rsync. В списке процессов вижу только ssh и rsync, имени самого скрипта (запускаемого cron) нет, видимо неправильно его написал.
что мешает создавать lock файл из скрипта, и проверять его наличие?
а в концуе скрипта чистить.
можно даже проверять, что файл не слишком старый, например, если предыдущий процесс завис или комп был перегружен в процессе работы
а в концуе скрипта чистить.
можно даже проверять, что файл не слишком старый, например, если предыдущий процесс завис или комп был перегружен в процессе работы
что мешает создавать lock файл из скрипта, и проверять его наличие?
Отсутствие опыта написания подобных вещей.
Отсутствие опыта написания подобных вещей.
digital422
ну куда там проще?
Код:
#!/bin/bash
# смотрим есть ли "lockfile"
if [ -e .running] ; then
echo " process already running"
exit
fi
# создаём lockfile
touch .running
# активно что-то там работаем.....
................................................
................................................
................................................
# поработали, удаляем lockfile
rm -f .running
ну куда там проще?
Код:
#!/bin/bash
# смотрим есть ли "lockfile"
if [ -e .running] ; then
echo " process already running"
exit
fi
# создаём lockfile
touch .running
# активно что-то там работаем.....
................................................
................................................
................................................
# поработали, удаляем lockfile
rm -f .running
Сделал вот так, вроде работает, есть ли замечания?
#!/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
#!/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, истории становления российского интернета. Сделано для людей.