Eu tenho que copiar arquivos em uma máquina. E os dados são imensamente grandes. Agora, os servidores precisam servir normalmente, e geralmente há um intervalo específico de horas ocupadas. Portanto, existe uma maneira de executar esses comandos de uma maneira que, se o servidor entra em horário de pico, ele interrompe o processo e, quando sai desse intervalo, o reinicia?
Resultado pretendido
cp src dst
if time between 9:00-14:00 pause process
After 14:00 resume cp command.
process
process-management
Sollosa
fonte
fonte
cp -al
para criar um farm de hardlinks? Ou use um sistema de arquivos que ofereça suporte a reflinks no nível de bloco com a cópia na gravação, usandocp -a --reflink=auto
? O BTRFS e o ZFS são compatíveis com cópias no mesmo dispositivo físico.src
muda entre 9:00 e 14:00? Nesse caso, simplesmente pausar e retomar ocp
processo pode resultar em arquivos corrompidos. Pode ser melhor executarrsync
em combinação com otimeout
comando.Respostas:
Sim, você precisa
O processo será exibido com o status "T" (PS). Para continuar faça um
Boa sorte!
fonte
Você pode pausar a execução de um processo enviando a ele um sinal SIGSTOP e, posteriormente, retomando-o enviando a ele um SIGCONT.
Supondo que sua carga de trabalho seja um processo único (não ajuda os funcionários em execução em segundo plano), você pode usar algo como isto:
Em seguida, quando o horário de ocupado começar, envie um SIGSTOP:
Posteriormente, quando o servidor estiver inativo novamente, retome-o.
Você precisará agendá-lo para horários específicos, quando desejar executá-lo. Você pode usar ferramentas como cron ou systemd timers (ou várias outras ferramentas similares) para agendá-lo. Em vez de agendar com base em um intervalo de tempo, você pode optar por monitorar o servidor (talvez analisando a média de carga, uso da CPU ou atividade dos logs do servidor) para decidir quando pausar / retomar a cópia.
Você também precisa gerenciar o arquivo PID (se você usar um), verifique se a sua cópia ainda está em execução antes de pausá-la, provavelmente você desejará limpar removendo o arquivo pid quando a cópia terminar, etc.
Em outras palavras, você precisa de mais informações para torná-lo confiável, mas a idéia básica do uso desses sinais SIGSTOP e SIGCONT para pausar / retomar a execução de um processo parece ser o que você está procurando.
fonte
Em vez de suspender o processo, você também pode dar uma prioridade mais baixa:
dará a menor prioridade (mais alta gentileza), para que o processo traga a CPU para outros processos que precisam dela na maioria das vezes.
No Linux, o mesmo pode ser feito com E / S com
ionice
:Colocará o processo na classe "ocioso", para que ele obtenha tempo de disco apenas quando nenhum outro programa solicitar E / S de disco por um período de cortesia definido .
fonte
Use rsync, esqueça o cp, para este cenário. existem parâmetros para limitar a largura de banda ou podem ser eliminados / interrompidos e iniciados mais tarde, de uma maneira que continuará, de onde saiu do google rsync example / s
fonte
Se você for fazer isso interrompendo o processo de execução, sugiro que você jogue com o programa Screen. Não uso o Linux há algum tempo, mas o IIRC apenas pausar o comando e retomar mais tarde o deixa bastante vulnerável; se você for desconectado acidentalmente, não poderá retomar sua sessão.
Com a tela, acredito que você pode interromper a sessão, desanexá-la e sair. Mais tarde, você pode voltar e reconectar a essa sessão. Você precisaria brincar um pouco, mas isso tornava as sessões muito mais robustas.
Você também pode sair e voltar para casa, depois fazer login remotamente, reconectar ao sistema que você iniciou no escritório e retomá-lo para a noite, depois recuperá-lo no dia seguinte no trabalho.
fonte
Se o seu shell o suportar (quase todos suportam), pressione ^ Z (Ctrl + Z) para enviar facilmente um
SIGTSTP
sinal para a tarefa em primeiro plano e continue comfg
(em primeiro plano) oubg
(em segundo plano).Se você fizer isso em várias tarefas e desejar retornar a elas posteriormente, poderá usar o
jobs
comando e retornar comfg/bg %#
, onde # é o número fornecido entre parênteses nos trabalhos.Lembre-se de que
SIGTSTP
é um pouco diferente deSIGSTOP
(que é usado em todas as outras respostas), o mais importante devido ao fato de que pode ser ignorado (mas eu não vi um programa ignorá-losl
). Mais detalhes podem ser encontrados nesta resposta no StackOverflow .fonte