Como agendar um script de backup irregular que requer confirmação do usuário

1

Eu tenho um script de backup que requer interação do usuário. Eu gostaria de programá-lo para funcionar, digamos, uma vez por semana.

As restrições são que (1) o computador inicializa diretamente no Gnome e é desligado diariamente, (2) o usuário deve ser capaz de cancelar a execução do script e ver qualquer saída de script na tela.

Entendo que o Gnome Scheduler usa anacron para tarefas cron semanais e que as tarefas perdidas são executadas na inicialização. Mas não adianta se o trabalho exigir uma janela de terminal para confirmação do usuário, porque o script será executado antes do início do Gnome.

O Gnome, é claro, tem Startup Applications, para que os programas sejam executados na inicialização. Mas isso é muito útil, pois não quero que meu script seja executado em todas as inicializações.

Uma solução?

    
por Sqerstet 13.07.2014 / 01:17

1 resposta

0

Baseada em parte no feedback nos comentários, aqui está a solução que eu encontrei.

1. Crie um arquivo de log vazio , ~/.lastbackup.log , para conter um registro da hora em que o script de backup foi executado pela última vez.

2. Crie um script agendador de wrapping , ~/scheduler.sh , para ser colocado nos Aplicativos de Inicialização do Gnome ( ~/.config/autostart ), para verificar a data do arquivo de log em cada inicialização e decidir se deseja executar o script principal:

#!/bin/bash
BACKUPINTERVAL=3 # in days
DATETODAY=$(date +"%Y-%m-%d")
DATELASTBACKUP=$(</path/to/.lastbackup.log) # get last backup date from logfile
DATEDIFF=$(( ($(date --date=$DATETODAY +%s) - $(date --date=$DATELASTBACKUP +%s) )/(60*60*24) ))
if [ "$DATEDIFF" -ge "$BACKUPINTERVAL" ] ; then
    # more than 3 days since last backup, so run script
    /usr/bin/x-terminal-emulator -e /path/to/backup.sh
fi

3. Crie o script de backup principal , ~/backup.sh , para ser executado quando necessário:

#!/bin/bash
/usr/bin/dialog --yesno "Do backup now?" 8 40 # user can opt out
if [ $? -eq 0 ] ; then
    # do backup
    # user can check output to screen
    if [ $? = 0 ]; then
        # write date to logfile
        echo $(date +"%Y-%m-%d") > /path/to/.lastbackup.log
        echo 'Backup done'
        read
    fi
fi
    
por Sqerstet 19.07.2014 / 12:21