Qualquer servidor precisa de manutenção periódica. Normalmente, os administradores de sistema confiam no comando cron(8).
Mas o FreeBSD já dispõe de uma infra-estrutura para manutenção periódica. Trata-se do comando periodic(8).
O ficheiro principal de configuração chama-se periodic.conf(5) e encontra-se no directório /etc; as opções por defeito deste ficheiro encontram-se no ficheiro /etc/defaults/periodic.conf. Além destes dois ficheiros, pode-se definir um terceiro (/etc/periodic.conf.local). As opções definidas no ficheiro periodic.conf tomam precedência às do /etc/defaults/periodic.conf e as do ficheiro /etc/periodic.conf.local tomam precedências sobre as do /etc/periodic.conf.O sistema vem já configurado para algumas das tarefas mais comuns de manutenção, tais como verificações de segurança, backups dos ficheiros principais de configuração (passwd(5), group(5), aliases(5) e pkgdb(1)), bem como relatórios do estados das partições, filas de mail, rede, etc. Estas são as tarefas de manutenção diárias. Existem também pré-configuradas tarefas de manutenção semanais e mensais.
Tudo isto depende de scripts que se encontram nos directórios daily, weekly e monthly, contidos no directório /etc/periodic. Embora um administrador de sistema possa acrescentar as suas próprias tarefas a estes directórios, isto não é aconselhável. Em vez disso, pode-se utilizar o directório /usr/local/etc/periodic. Dentro deste podem-se criar os mesmos directórios daily, weekly e monthly. Os scripts aqui contidos serão executados depois dos scripts principais do sistema.
Que uso se pode dar a esta infra-estrutura? Qualquer um que se deseje. Eu, por exemplo, defini uma tarefa diária que faz backups das bases de dados dos meus blogs e uma tarefa mensal que faz backup da minha base de dados de IP accounting.
O script que desenvolvi para o backup diário das bases de dados é:
#!/bin/sh # # If there is a global system configuration file, suck it in. if [ -r /etc/defaults/periodic.conf ] then . /etc/defaults/periodic.conf source_periodic_confs fi case "$daily_mysql_backup_enable" in [Yy][Ee][Ss]) echo echo -n 'Backing up MySQL databases: ' backup_file_name=${mysql_backup_dir}/mysql_backup-`date +%Y%m%d`.sql for i in ${daily_mysql_backup_ignore_tables}; do ignore_tables="${ignore_tables} --ignore-table=$i" done touch ${backup_file_name} for i in ${daily_mysql_backup_databases}; do echo -n "$i " /usr/local/bin/mysqldump --skip-quick --force --single-transaction -uroot \ -ppassword ${ignore_tables} --databases $i >> ${backup_file_name} done /usr/local/bin/mysqldump --skip-quick --force --single-transaction -uroot \ -ppassword pmacct traffic_by_month >> ${backup_file_name} echo mdrc=$? /usr/bin/bzip2 -9 ${backup_file_name} bzrc=$? if [ mdrc=0 -a bzrc=0 ]; then rc=0 else rc=1 fi ;; *) rc=0;; esac exit $rc
Não estamos, no entanto, limitados a esperar que o comando periodic(8) seja invocado pelo cron(8). Pode-se, a qualquer momento, executar o comando periodic <directório> para executar os scripts contidos nos directórios /etc/periodic/<directório> e /usr/local/periodic/<directório>.