Você pode fazer seu cronjob em /etc/cron.daily/
e ele será executado automaticamente nesse período de tempo.
Editar:
Desculpe, eu estava fazendo referência a uma antiga instalação Debian em que anacron
não foi instalado por padrão. Nesse caso /etc/cron.daily/
foi executado por /etc/crontab
em 6:25. Mas as instalações mais recentes do Debian (e também o Ubuntu) instalam anacron
por padrão e assim /etc/cron.daily/
será executado por /etc/anacrontab
cinco minutos depois que anacron
foi iniciado ou a cada novo dia.
Para alcançar seu cronograma (a partir dos comentários), você pode configurar um cronjob que, por exemplo, a cada 10 min entre 3-6 inicie anacron
, que cuidará de que a tarefa de backup seja executada apenas uma vez ou que você possa escrever um script de controle personalizado.
1. Alternativa: anacron
mkdir ~/.local/share/anacron_spool
echo "1 0 backup.daily /path/to/backup.sh" > ~/.config/anacrontab
(crontab -l; echo "*/10 3-6 * * * /usr/sbin/anacron -s -t $HOME/.config/anacrontab -S $HOME/.local/share/anacron_spool") | crontab -
Isso fará com que o anacron para serializar ( -s
) execute todos os trabalhos definidos em ~/.config/anacrontab
. Como, por padrão, somente a raiz tem permissão de gravação para gravar em /var/spool/anacron/
, onde os registros de data e hora são armazenados, usamos um diretório-spool personalizado ( -S
). Se todos os trabalhos forem feitos para hoje, o anacron sairá.
2. Alternativa: script de controle personalizado
Abra um editor (por exemplo, sudo nano /usr/local/bin/run_once_a_day.sh
) e cole isto:
#!/bin/bash
SPOOL="$HOME/.local/share/run_once_spool/"
if [ $# != 2 ]; then
echo "Usage: $(basename $0) <job-identifier> <command>"
exit 1
fi
if [ ! -d $SPOOL ]; then
mkdir $SPOOL
fi
if [ -e ${SPOOL}${1} ]; then
last_run=$(cat ${SPOOL}${1})
else
last_run=0
fi
today=$(date +%Y%m%d)
if [ $last_run != $today ]; then
$2
echo $today > ${SPOOL}${1}
fi
Pressione CTRL + O para salvar e CTRL + X para sair. Tornar executável e adicionar um cronjob que irá iniciá-lo periodicamente com:
sudo chmod 755 !$
(crontab -l; echo "*/10 3-6 * * * /usr/local/bin/run_once_a_day.sh backup.daily /path/to/backup.sh") | crontab -