Automatizar backups executado a partir de um script bash no Linux da maneira correta

3

Eu tenho um script que escrevi para fazer backup de uma instalação do Moodle. Funciona bem, testei os backups, mas há um problema com isso; Quando eu faço os backups, desde que eu tenho que usar sudo para digitar a senha toda vez, eu tenho que digitar fisicamente a senha em vez de apenas executar um cron job para fazer isso automaticamente.

Agora, suspeito que isso tenha algo a ver com algo que não sei sobre cron ou usando uma chave SSH; De qualquer forma, eu gostaria de automatizar o backup.

#!/bin/bash

# Turn on Maintance mode and log it...
logger "BEGIN Turning on maintance mode in moodle"
lynx -cmd_script=./backupScripts/turnOnMaintMode http://moodle.leeand00domain.local
logger "END Turning on maintance mode complete."

logger "BEGIN Creating Backup Directory"
export bkdir=$(date +"%Y-%m-%d")
mkdir $bkdir 
cd $bkdir
logger "END Creating Backup Directory"

#Get a backup copy of the database
logger "BEGIN Backing up the Moodle Database"
mysqldump -u moodleuser --password=XXXXX -C -Q -e --create-options moodle > moodle-database.sql
logger "END Backing up the Moodle Database"

#Get a backup copy of moodle data 
logger "BEGIN Backing up moodledata"
tar -cvzf moodledata.tar.gz --exclude='/var/moodledata/cache' --exclude='/var/moodledata/lang' --exclude='/var/moodledata/sessions' --exclude='/var/moodledata/temp' /var/moodledata  && tar -cvzf moodleinstallation.tar.gz /var/www
logger "END Backing up moodledata"

cd ..

tar -cvzf  $bkdir.tar.gz  $bkdir

# Turn off Maintance mode and log it...
logger "BEGIN Turning off maintance mode in moodle"
lynx -cmd_script=./backupScripts/turnOffMaintMode http://moodle.leeand00domain.local
logger "END Turning off maintance mode in moodle complete."
    
por leeand00 03.05.2014 / 15:31

2 respostas

4

Eu faria 1 das seguintes coisas.

Método 1 - crons do sistema

Adicione o script de backup aos crons do sistema e não à entrada crontab de um usuário real. A maioria dos sistemas mantém uma estrutura de diretórios em /etc da seguinte forma:

$ ls -1d /etc/cron.*
/etc/cron.d
/etc/cron.daily
/etc/cron.deny
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

Você pode simplesmente colocar um script que deseja executar em qualquer frequência no diretório apropriado.

Método # 2 - senha menos sudo

A outra abordagem envolveria a configuração de uma entrada no arquivo /etc/sudoers usando o comando visudo para editá-lo. Essa entrada concederia acesso sem senha à entrada crontab do usuário para esse script específico. Sua entrada em seu crontab seria algo assim:

$ sudo ...your script...

E a entrada no seu arquivo /etc/sudoers seria algo assim:

user ALL=(root) NOPASSWD: /home/user/cronscript.sh

Referências

por 03.05.2014 / 16:38
2

Eu sugiro entrar no crontab of root usando

sudo crontab -e

Quando você o inclui como o primeiro comando em seu script, todos os comandos serão executados como root crontab.

Se precisar de mais informações, consulte esta página.

Commands that normally run with administrative privileges (i.e. they are generally run using sudo) should be added to the root user's crontab (instead of the user's crontab)

    
por 03.05.2014 / 16:14