Automação e Registo de Actividades (cron e syslog) Nuno Alexandre Magalhães Pereira 1 de Novembro de 2005 1 Automação Tarefas como, por exemplo, apagar ficheiros temporários, efectuar backups, renovar ficheiros de registos de actividades e outros, são tarefas repetitivas que devem ser automatizadas. O Linux tem mecanismos que permitem ao administrador escalonar tarefas para determinadas horas. A sua utilização, juntamente com scripts escritos para o efeito, tornam estes mecanismos numa ferramenta de extrema utilidade para a manutenção automática dos sistemas. Um destes mecanismos é o cron. 1.1 Componentes do cron O cron tem 3 componentes: Ficheiros crontab (ficheiros de configuração do cron): estes ficheiros contém a informação das tarefas a executar e quando são executadas. O comando crontab: este comando é usado para modificar os ficheiros do crontab. Estes ficheiros não devem ser editados num editor de texto. O serviço crond: o serviço crond é responsável por ler os ficheiros de configuração (crontab) e executar as tarefas nas alturas correspondentes. 1.2 Formato do crontab Os ficheiros do crontab são ficheiros de texto em que cada linha tem 7 campos separados por espaços. Os primeiros 5 indicam o tempo de execução, o sexto indica o utilizador e o último o comando a executar: minute :Minuto da hora hour :Hora do dia day :Dia do mês month :Mês do ano weekday :Dia da semana, Linux usa três letras para representar o dia: sun, mon, tue, wed, thu, fri, sat. 1
user :O comando irá ser executado com as permissões deste utilizador command :O comando a executar As linhas iniciadas pelo caracter socomentriosn oscamposref erentesespecif icaodotempopode seusar : *, que significa todas as possibilidades que o campo pode ter. Um número Uma lista de números separados por virgulas, sem espaços. Dois números separados por - que significa intervalo. Exemplos: Todas as horas(quando minutos = 0) aparece na consola Cucoo Cucoo : 0 * * * * echo Cucoo Cucoo > /dev/console 2 >1 Às meias horas entre as 9 da manhã e as 5 da tarde, todos os dias de Janeiro que são domingo, quarta ou sábado, acrescenta a data ao ficheiro date.file : 30 9-17 * 1 sun,wed,sat echo date /date.file 2>1 Quando os comandos são executados pelo crond não há nenhum terminal associado com esse processo. Isto significa que o stdout e stderr devem ser redireccionados para algum lado. Caso não seja, os resultados do comando (stdout) são enviados por email à pessoa indicada no ficheiro crontab. A seguir é apresentado um exemplo do ficheiro /etc/crontab. SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ #run AV 01 02 * * * root bdc --all --arc --nowarn --disinfect / mail -s "Scan Antivirus" \$MAILTO # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly 2
2 Registo de Actividades Uma grande parte dos programas necessitam/devem, de alguma forma, manter um registo das suas acções. Em versões iniciais do UNIX, relativamente a este tipos de funcionalidades, era cada um por si próprio. Ou seja, cada programa mantinha o seu próprio registo de acções e a respectiva configuração, levando a uma grande diversidade na forma como tal era feito, o que tornava a vida do administrador de sistemas muito difícil quando necessitava de manter sob vigilância alguma aplicação. Para resolver este problema foi criado o syslog. Este sistema funciona como plataforma centralizada, que pode ser utilizada por qualquer aplicação, para o registo de actividades (logs) e respectiva configuração. Desta forma, o administrador apenas tem de configurar este sistema, para ter um serviço de registo de actividades homogéneo entre as diversas aplicações. 2.1 Componentes O syslog pode ser dividido nos seguintes componentes: Ficheiro de log por omissão (/var/log/messages na maioria dos sistemas). O formato das mensagens. A API (Application Program Interface) utilizada pelos programas para utilizarem as funcionalidades do syslog O serviço que direcciona a informação a ser registada para a localização adequada, baseado no ficheiro de configuração. O ficheiro de configuração. 2.2 Formato das mensagens O syslog utiliza um formato normalizado para todas as mensagens registadas. Este formato inclui: Facility: Parte do sistema que está a gerar a mensagem. Este pode assumir valores como: auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security (o mesmo que auth), syslog, user, uucp e local0 a local7. Priority/Level: Determina a importância da mensagem. Pode assumir os valores, por ordem ascendente: debug, info, notice, warning, warn (mesmo que warning), err, error (mesmo que err), crit, alert, emerg, panic (mesmo que emerg). Uma string com a mensagem. 3
2.3 API Para que o syslog seja útil, os programa devem ser capazes de lhe passar as mensagens a serem registadas de acordo com a configuração definida. Para tal, existem pelo menos, dois métodos que as aplicações podem utilizar para enviar mensagens ao syslog: logger: O logger é um comando que pode ser utilizado a partir da shell, para enviar mensagens ao syslog. API syslog: É uma API que consiste num conjunto de funções (openlog, syslog, closelog) que são utilizadas pelos programas utilizam. Esta API encontra-se definida no ficheiro syslog.h, que pode ser encontrado na pasta /usr/include. 2.4 syslogd O syslogd é o nome do serviço do syslog. É iniciada quando o sistema arranca. Nesta altura, ou quando recebe o sinal HUP, lê o ficheiro de configuração que, normalmente, se encontra em /etc/syslog.conf. O syslogd recebe mensagens e procede de acordo com a configuração determinada no respectivo ficheiro de configuração. As acções típicas incluem: Acrescentar uma mensagem a um ficheiro específico. Encaminhar a mensagem para um serviço syslog remoto. Apresentar a mensagem nos terminais de todos ou alguns dos utilizadores no sistema. 2.5 /etc/syslog.conf Por omissão, o syslogd retira as suas configurações do ficheiro /etc/syslog.conf, no entanto, é possível definir outro ficheiro de configuração. O ficheiro de configuração do syslog é um ficheiro de texto onde cada linha está dividida em dois campos, separados por espaços ou tabulações: Um selector, utilizado para seleccionar as mensagem. Uma acção, que especifica a acção a tomar quando é encontrada uma mensagem que coincide com o selector. 2.5.1 Selector O formato do selector é facility.level. Onde facility e level assumem os valores anteriormente definidos para o formato das mensagens. O campo de selector pode incluir: selectores múltiplos, separados por ; facilities múltiplas, separadas por vírgulas, para um único level um * para significar todas as facilities 4
O nível (level) pode ser especificado com ou sem um =. Se for utilizado um igual, apenas mensagens exactamente do nível especificado serão seleccionadas. Sem o igual todas as mensagens do nível especificado ou acima deste serão seleccionadas. 2.5.2 Acções As acções podem tomar um dos seguintes quatro formatos: Um caminho, começado por / As mensagens serão adicionadas no fim do ficheiro especificado. O nome de uma máquina, começado por @ As mensagens são encaminhadas para a máquina especificada. Uma lista de utilizadores separados por vírgulas As mensagens aparecem no écran dos utilizadores especificados, que estiverem no sistema. Um asterisco As mensagens aparecem no écran de todos os utilizadores no sistema. 2.5.3 Exemplo Segue-se um exemplo do ficheiro /etc/syslog.conf. # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console # Log anything (except mail) of level info or higher. # Don t log private authentication messages! *.info;mail.none;authpriv.none /var/log/messages # The authpriv file has restricted access. authpriv.* /var/log/secure # Log all the mail messages in one place. mail.* /var/log/maillog # Everybody gets emergency messages, plus log them on another # machine. *.emerg * # Save mail and news errors of level err and higher in a # special file. uucp,news.crit /var/log/spooler 5