PROGRAMAÇÃO EM LINUX Usuário Avançado Ulisses Thadeu V Guedes SERVIÇOS DE SISTEMA PROGRAMÁVEIS Cron O serviço at Aplicações em BackGround A estrutura hierárquica de diretórios 1/5 PROGRAMAÇÃO EM LINUX Usuário Avançado Ulisses Thadeu V Guedes CRON CRON é um serviço Linux de execução repetitiva de aplicações em “hora marcada” com resolução de minutos. O arquivo de “controle” do serviço é o crontab, normalmente localizado no diretório /etc, para as definições de aplicações do sistema ou em algum diretório sob responsabilidade do usuário. Neste último caso, o serviço deve usar a opção -u A documentação do cron está disponível e bem detalhada em man cron e man crontab. AT O atd é um serviço de execução de jobs em hora marcada. Um job somente é executado em instantes ociosos do sistema. APLICAÇÔES EM BACKGROUND Não é incomum a execução de aplicações em background. Tem-se visto em listas de discussão e em foruns de suporte de distribuições, a demanda sobre o seguinte problema: “Gostaria de executar uma aplicação em background, através de script em shell bash. Acontece que assim que comando o logout da sessao aquela aplicação também pára. Tem como mantê-la em execução?” Tal questionamento indica que o usuário ainda não entendeu o que é um ambiente shell em Linux. O ambiente shell captura para si todo o sistema de arquivo, incluindo o padrão de entrada, saída, erros e impressão (stdin, stdout, stderr e stdprn). Ao sair da sessão todo ambiente é desativado. Para que as aplicações não permaneçam sem um processo PAI (o Shell!), o kernel força o encerramento daquelas aplicações enviando o sinal SIGHUP para todo o grupo pertencente ao ambiente shell.. O que falta é desacoplar a execução da aplicação do ambiente shell e atrelá-la ao kernel. Como o kernel está presente e em execução indiferentemente de uma sessão de usuário, e sendo ele o PAI (não importa se é ADOTIVO ou VERDADEIRO), não há mais motivos para o “sacrifício” da aplicação, via sinal SIGHUP. Como fazer o Kernel ADOTAR a aplicação em background? Sempre que iniciar uma aplicaçao em background (aplicação &) observe o PID mostrado. Não confundir o PID com o número do JOB do processo. Informe ao shell a intenção de desacoplar aquele PID através do comando embutido do shell, denominado disown, na sintaxe: disown -h PID Exemplo: [root@torrinha Inspector]# bash /root/Documents/Inspector/Inspector.sh 1 & 2/5 PROGRAMAÇÃO EM LINUX Usuário Avançado Ulisses Thadeu V Guedes [1] 23682 [root@torrinha Inspector]# disown -h 23682 Pronto! O processo PID estará fora da tabela de jobs sob custódia do ambiente shell e não receberá o sinais destinados ao grupo de aplicações do shell (inclusive). A partir de então, aquele processo só será interrompido se receber um sinal SIGHUP (kill -SIGHUP PID), especificamente destinado a ele. 3/5 PROGRAMAÇÃO EM LINUX Usuário Avançado Ulisses Thadeu V Guedes A ESTRUTURA HIERÁRQUICA DE DIRETÓRIOS Há um consenso entre distribuições, desenvolvedores de pacotes, e implementadores de sistemas sobre o FHS (Filesystem Hierarchy Standard) em sistemas Unix e clones. A última versão (2.3) foi adotada em 2004 e a versão anterior (2.2) em 2001. O FHS proposto satisfaz os padrões BSD e SystemV. Apesar do esforço de uma padronização, algumas distribuições apresentam tendências no FHS conforme a sua origem: modelo original do Linux - Debian, slackware, Camberra, etc e derivadas da RedHat Linux - Mandriva, Suse, etc O Modelo FHS de consenso pode ser obtido em http://www.pathname.com/fhs/ sugestões de correção estão em http://bugs.freestandards.org/ (2) (1) e as Em (1) o FHS é descrito em detalhes, com o propostas de localização das aplicações do sistema, bibliotecas, aplicações adicionais e de usuário. OS PACOTES DE DISTRIBUIÇÃO Há, pelo menos, três tipos de estruturas de pacotes de distribuição: - Aplicações em arquivos comprimidos em tar.gz - Debian, com extensão “.deb” - RPM, padrão de empacotamento desenvolvido pela RedHat (RedHat Package Management) A URL http://tldp.org/HOWTO/RPM-HOWTO/build.html descreve os procedimentos necessários para criar um pacote rpm. As distribuições que seguem este modelo de empacotamento seguem o FHS porém concentram as bibliotecas em /usr/lib e /lib. Somente os pacotes opcionais, aqueles fornecidos por fabricantes, é que são instalados em /opt ou, eventualmente, em /usr/local. Em http://tldp.org/HOWTO/html_single/Debian-Binary-Package-Building-HOWTO/ tem-se os procedimentos para o formato debian .deb. A distribuição Gentoo, derivada do Debian/Linux distribui somente os pacotes com fontes, resultando num core otimizado para o hardware do computador do usuário. Ambas seguem o FHS. A distribuição Slackware usa o .tgz como formato de empacotamento de binários e fontes. É uma distribuição bastante estável e não se preocupa em prover “facilidades” administrativas nem adaptações ou correções exclusivas no Kernel-Linux, como acontece com outras distribuições. Os arquivos seguem a estrutura FHS, explorando com mais ênfase o diretório 4/5 PROGRAMAÇÃO EM LINUX Usuário Avançado Ulisses Thadeu V Guedes /usr/local e núcleo original. Há alguma discussão para unificar os formatos de empacotamento. Minha modesta opinião é: “o formato a ser escolhido deve ser o mais simples possível”. 5/5