3

Я хочу запустить команду rsync в полночь, но остановлюсь в 8 утра. Как я могу запланировать начало и конец команды?

Я посмотрел в cronjobs, но это начнется только в определенное время. Любые идеи о том, как закончить этот процесс? Я буду запускать его из OS X. Я думал о том, чтобы войти в систему как новый пользователь ssh и просто использовать cronjob для запуска bash-скрипта, чтобы разорвать это соединение, но это выглядит переутомлением.

2 ответа2

3

Добавьте вторую запись crontab которая убивает rsync в 8 часов утра. Другой вариант - запустить rsync в фоновом режиме и запустить цикл сценария до 8 часов утра, прежде чем он убьет процесс:

#!/bin/bash

rsync ... &
pid=$!

while /bin/true; do
  if [ $(date +%H) -ge 8 ]; then
    kill -TERM $pid
    exit 0
  else
    sleep 60
  fi
done
3

У вас может быть сценарий оболочки, записывающий PID rsync в файл в фиксированном месте. Я бы получил PID, запустив rsync в фоновом режиме (append &) и использовав $! ,

rsync blah/ remote:blah/ &
echo $! > pidfile

Затем другое задание cron в 8 утра прочитает этот файл и поместит результат в RSPID.

RSPID=`cat pidfile`

Затем запустите ps $RSPID | grep rsync чтобы увидеть, запущен ли он, а затем kill $RSPID .

Что-то в этом роде должно работать.

Вы также можете поместить команду kill в скрипт оболочки. Запустите rsync в фоновом режиме и поспите 8 часов, затем убейте rsync.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .