Aprenda a agendar ações no Linux com o Cron
O cron é um serviço Unix que permite que tarefas sejam executadas em modo “background” em intervalos regulares pelo Daemon da cron. Estas tarefas são normalmente designadas por “cron jobs” em Unix. Veja como usar.
O Cron é um mecanismo que permite agendar tarefas que tem como base o tempo em sistemas operativos baseados no Unix ou Linux. Permite que os utilizadores programem tarefas (comandos ou scripts) para serem executadas periodicamente em horários, datas ou intervalos fixos. Essas tarefas agendadas são designados de "cron jobs" e podem automatizar tarefas repetitivas como manutenção do sistema, backups, atualizações e muito mais.
Os "cron jobs" estão constantemente a verificar o ficheiro /etc/crontab e os diretórios /etc/cron.* e /var/spool/cron/. O crontab é o método para criar, editar, instalar, desinstalar e listar os "cron jobs".
Sintaxe do Crontab no Linux
O ficheiro do crontab é composto por cinco campos para especificar o dia, a data e a hora seguido pelo comando a ser executado.
- Minutos (0-59)
- Hora (0-23)
- Dia do mês (1-31)
- Mês (1-12 ou jan-Dez)
- Dia da semana (0-7 ou dom-sáb, onde 0 e 7 representam domingo)
A sintaxe deverá ser igual à apresentada na imagem seguinte.
Além disso, há uma sintaxe especial para definir intervalos e faixas:
- Asterisco (*) significa todos os valores possíveis dentro de um campo.
- Vírgulas (,) separam múltiplos valores dentro de um campo.
- Hífens (-) especificam faixas de valores.
- Barras (/) indicam valores de passo.
Exemplo de Crontab
Uma linha no crontab como a que está em baixo remove os ficheiros temporários de /home/someuser/tmp each day às 18:30 de cada dia.
30 18 * * * rm /home/someuser/tmp/* |
Alterando os valores dos parâmetros, como mostrado abaixo, irá provocar que este comando corra a diferentes horas (ou datas):
min| hora| dia do mês| mês| dia da semana| data/hora de execução
30 0 1 1,6,12 * — 00:30 Hrs no 1º de jan, junho e Dez. 0 20 * 10 1-5 –8.00 PM todos os dias da semana (seg-sex) apenas em outubro. 0 0 1,10,15 * * — meia noite no 1º, 10º e 15º dia do mes. 5,10 0 10 * 1 — às 12:05 e 12:10, todas as segundas e no 10º dia de cada mês. |
Nota : Se inadvertidamente aceder à crontab sem argumentos não faça Control-d para sair. Esse comando irá remover todas as entradas do crontab. Faça Control-c para sair.
Comandos do crontab
Antes de iniciar a criação de "cron jobs" deve escolher com que editor de texto vai trabalhar. Por exemplo, usando o comando “export EDITOR=nano” vai passar a usar o nano quando editar o ficheiro do crontab.
- crontab -e
- Edita o ficheiro do crontab, ou cria um caso ainda não exista.
- crontab -l
- Mostra o conteúdo do ficheiro do crontab.
- crontab -r
- Remove o ficheiro do crontab.
- crontab -v
- Mostra quando foi a última vez que o ficheiro do crontab foi editado. (Apenas disponível em alguns sistemas)
Muito bem explicado!
bom artigo
No crontab tenho 2 linhas que fazem maravilhas
Introduzo crontab -l e mostro os segredos. Hás 8 horas tem 2 comandos que são executados
# m h dom mon dow command
0 8 * * * /home/zemaria/scripts/backup/mysqlbackup/mysql_backup.sh | at -M now
1 8 * * * /home/zemaria/scripts/backup/backupsites.sh | at -M now
O script mysql_backup.sh tem o seguinte condigo
#!/bin/bash
DB_BACKUP=”/opt/backups/mysql_backup/`date +%Y-%m-%d`”
# this password is in /etc/mysql/debian.cnf
DB_USER=”debian-sys-maint”
DB_PASSWD=”NRj0xQSkWbSpZIOA”
HN=`hostname | awk -F. ‘{print $1}’`
# Create the backup directory
mkdir -p $DB_BACKUP
# Remove backups older than 10 days
#find /opt/backups/mysql_backup/ -maxdepth 1 -type d -mtime +10 -exec rm -rf {} \;
# Backup each database on the system
for db in $(mysql –user=$DB_USER –password=$DB_PASSWD -e ‘show databases’ -s –skip-column-names|grep -viE ‘(staging|performance_schema|information_schema)’);
do mysqldump –user=$DB_USER –password=$DB_PASSWD –events –opt –single-transaction $db | gzip > “$DB_BACKUP/mysqldump-$HN-$db-$(date +%Y-%m-%d).gz”;
done
O script backupsites.sh tem o seguinte codigo
#!/bin/bash
# ###########################
# Data 2023/04/06
# Versão 1.0
# José Maria Oliveira Simões
# ###########################
#set -xv
echo “Inicio de backup dos sites”
DB_BACKUP=”/home/zemaria/Documents/sites/`date +%Y%m%d`”
if [ -d $DB_BACKUP ] ;
then
echo “Já existe o directorio”;
cd $DB_BACKUP
if [ `find . -type f | wc -l` -ge 1 ];
then
echo “Existem arquivos dentro do directorio”;
else
echo “Nao existem arquivos dentro do directorio”;
echo “Inicio de copia de arquivos”;
cd $DB_BACKUP
cp -R /var/www/html/* .
echo “A copia foi feita”;
fi
cd –
else
echo “Não existe o directorio”;
echo “O directorio vai ser criado”;
mkdir -p $DB_BACKUP
cd $DB_BACKUP
echo “inicio da copia de arquivos”;
cp -R /var/www/html/* .
echo “O directorio foi criado e os arquivos foram copiados”;
cd –
fi
echo “Fim do backup dos sites”