O script de desligamento parece ser executado duas vezes

2

Eu tenho um pequeno script bash de backup que escrevi para o meu computador no trabalho. Copiei o script em /etc/rc0.d/ e chamei-o de K01backup , para que ele seja executado antes de qualquer outra coisa no desligamento. Faz o backup de todos os dados do meu computador (executando o Ubuntu 14.04LTS) e minhas cópias de trabalho e uma máquina virtual localizada em um SSD interno separado para um disco rígido externo e adiciona a saída de log aos arquivos em cada pasta.

Aqui está o script:

#!/bin/bash

LOG="/syncLog"
VMORIG="/media/SSDData/VM"
PROJORIG="/media/Data/Projects"
DESTROOT="/media/ExtData/Backups"
LOGVM=${DESTROOT}"/VM"${LOG}
LOGPROJ=${DESTROOT}"/Projects"${LOG}
ALLORIG="/"
DESTALL=${DESTROOT}"/All"
LOGALL=${DESTROOT}"/All"${LOG}


echo "STARTED" > ${LOGPROJ}
date +%d.%m.%Y/%H:%M:%S >> ${LOGPROJ}
rsync -avvx --progress --no-whole-file ${PROJORIG} ${DESTROOT} >> ${LOGPROJ}
echo "FINISHED" >> ${LOGPROJ}
date +%d.%m.%Y/%H:%M:%S >> ${LOGPROJ}

echo "STARTED" > ${LOGVM}
date +%d.%m.%Y/%H:%M:%S >> ${LOGVM}
rsync -avvx --progress --no-whole-file  ${VMORIG} ${DESTROOT} >> ${LOGVM}
echo "FINISHED" >> ${LOGVM}
date +%d.%m.%Y/%H:%M:%S >> ${LOGVM}

echo "STARTED" > ${LOGALL}
date +%d.%m.%Y/%H:%M:%S >> ${LOGALL}
rsync -avvx --progress --no-whole-file --exclude "/media/*" --exclude "/indel/*" ${ALLORIG} ${DESTALL} >> ${LOGALL}
echo "FINISHED" >> ${LOGALL}
date +%d.%m.%Y/%H:%M:%S >> ${LOGALL}

Em seguida, executei sudo chmod +x /etc/rc0.d/K01backup para torná-lo executável. No início, o roteiro demorou cerca de uma hora para ser executado e tudo funcionou bem. Mas por um tempo agora, eu posso ver nos arquivos de log que o script começou (presumivelmente reiniciado ) uma hora depois que eu saí do trabalho e todos os arquivos já estavam atualizados, então só demorou cerca de um minuto para ser executado.

Alguém sabe o que eu poderia ter feito de errado?

    
por David Wright 09.12.2014 / 09:35

1 resposta

2

O README nesse diretório indica que os scripts nesse diretório são chamados apenas uma vez no desligamento (e não na reinicialização).

Com um programa de teste simples

#!/bin/bash

LOG=/root/backup.log
date >> $LOG
echo $* >> $LOG

Eu notei que uma vez o programa foi chamado duas vezes, uma vez sem um parâmetro e uma vez com o parâmetro 'stop'. No entanto, não consegui reproduzi-lo.

Eu sugeriria registrar os parâmetros de chamada reais no programa e no teste de script para $1 sendo stop .

Também é mais comum colocar esse programa como backup em /etc/init.d e criar um link de /etc/rc0.d/K01backup para esse script, mas isso não deve influenciar sua operação de forma alguma. Todas as ferramentas que gerenciam essas entradas trabalham com a criação / exclusão desses links.

Baseado em experimentar este script básico, o OP descobriu que havia um arquivo de backup para editar o arquivo: /etc/rc0.d/K01backup~ que foi executado também. Colocar o arquivo backup em /etc/init.d/ desde o início, e criar um link, evitaria que isso ocorresse (independentemente de haver ou não um arquivo /etc/init.d/backup~ ).

    
por 09.12.2014 / 10:39