Eu quero executar um comando rsync à meia-noite, mas pará-lo às 8h. Como posso agendar o início e término de um comando?

3

Eu quero executar um comando rsync à meia-noite, mas pará-lo às 8h. Como posso agendar o início e término de um comando?

Eu olhei para cronjobs, mas isso só vai começar em um determinado momento. Alguma idéia de como terminar esse processo? Eu estarei rodando ele do OS X. Eu pensei em fazer login como um novo usuário ssh e apenas usando um cronjob para iniciar um script bash para matar aquela conexão, mas isso parece um excesso de trabalho.

    
por slycat 12.03.2013 / 23:39

2 respostas

3

Você poderia ter um script de shell escrevendo o rsync PID em um arquivo em um local fixo. Eu pegaria o PID iniciando o rsync em segundo plano (append &) e usaria $! .

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

Em seguida, outro cron job às 8:00 da manhã leria esse arquivo e colocaria o resultado no RSPID.

RSPID='cat pidfile'

Em seguida, execute ps $RSPID | grep rsync para ver se ainda está em execução e, em seguida, faça kill $RSPID .

Algo nesse sentido deve funcionar.

Você também pode colocar o comando kill no shell script. Inicie o rsync em segundo plano e durma 8 horas, depois mate o rsync.

    
por 13.03.2013 / 00:30
3

Adicione uma segunda entrada crontab que mata rsync às 8 da manhã. Outra opção seria iniciar rsync em segundo plano e fazer o loop do script até as 8h antes que ele elimine o processo:

#!/bin/bash

rsync ... &
pid=$!

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