Este estudo de caso modifica arquivos crontab durante a instalação do pacote.
Este estudo de caso demonstra as seguintes técnicas:
Uso de classes e scripts de ação de classe
Para obter informações, consulte Escrevendo scripts de ação de classe.
Uso do comando crontab dentro de um script de ação de classe.
A forma mais eficiente de editar mais de um arquivo durante a instalação é definir uma classe e fornecer um script de ação de classe. Se você usou a abordagem da classe build, será necessário distribuir um script de classe build para cada arquivo crontab editado. A definição de uma classe cron proporciona uma abordagem mais geral. Para editar arquivos crontab com esta abordagem, você deve:
Definir os arquivos crontab que serão editados no arquivo prototype.
Criar uma entrada no arquivo prototype para o arquivo crontab que será editado. Definir a classe como cron e o tipo de arquivo como e de cada arquivo. Usar o nome real do arquivo a ser editado.
Criar os arquivos crontab no pacote.
Estes arquivos contêm as informações que você deseja adicionar aos arquivos crontab existentes de mesmo nome.
Criar um script de ação de classe de instalação para a classe cron.
O script i.cron de amostra realiza os seguintes procedimentos:
Determina o ID de usuário (UID).
O script i.cron define a variável user como o nome base do script de classe cron que está sendo processado. Tal nome é o UID. Por exemplo, o nome base de /var/spool/cron/crontabs/root é root, que também é o UID.
Executa o crontab usando o UID e a opção - l.
A opção -l diz ao crontab para enviar o conteúdo do arquivo crontab do usuário definido para a saída padrão.
Conduz a saída do comando crontab ao script sed que remove as entradas adicionadas anteriormente com esta técnica de instalação.
Coloca a saída editada em um arquivo temporário.
Adiciona o arquivo de dados do UID root (distribuído com o pacote) ao arquivo temporário e adiciona uma marca para que você saiba de onde provêm estas entradas.
Executa o crontab com o mesmo UID e o fornece ao arquivo temporário como entrada.
Criar um script de ação de classe de remoção cron.
O script r.cron é semelhante ao script de instalação, exceto que não há nenhum procedimento para adicionar informações ao arquivo crontab.
Estes procedimentos são realizados por todos os arquivos na classe cron.
Os scripts i.cron e r.cron descritos abaixo são executados pelo superusuário. A edição de outro arquivo crontab do usuário como superusuário pode ter conseqüências imprevisíveis. Se necessário, altere a seguinte entrada em cada script de:
crontab $user < /tmp/$$crontab ||
para
su $user -c "crontab /tmp/$$crontab" ||
PKG=case7 NAME=Case Study #7 CATEGORY=application BASEDIR=/opt ARCH=SPARC VERSION=Version 1.0 CLASSES=cron |
i pkginfo i i.cron i r.cron e cron /var/spool/cron/crontabs/root ? ? ? e cron /var/spool/cron/crontabs/sys ? ? ? |
# PKGINST parameter provided by installation service while read src dest do user=`basename $dest` || exit 2 (crontab -l $user | sed -e "/#$PKGINST$/d" > /tmp/$$crontab) || exit 2 sed -e "s/$/#$PKGINST/" $src >> /tmp/$$crontab || exit 2 crontab $user < /tmp/$$crontab || exit 2 rm -f /tmp/$$crontab done exit 0 |
# PKGINST parameter provided by installation service while read path do user=`basename $path` || exit 2 (crontab -l $user | sed -e "/#$PKGINST$/d" > /tmp/$$crontab) || exit 2 crontab $user < /tmp/$$crontab || exit 2 rm -f /tmp/$$crontab done exit |
41,1,21 * * * * /usr/lib/uucp/uudemon.hour > /dev/null 45 23 * * * ulimit 5000; /usr/bin/su uucp -c "/usr/lib/uucp/uudemon.cleanup" > /dev/null 2>&1 11,31,51 * * * * /usr/lib/uucp/uudemon.poll > /dev/null |
0 * * * 0-6 /usr/lib/sa/sa1 20,40 8-17 * * 1-5 /usr/lib/sa/sa1 5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 1200 -A |
Se a edição de um grupo de arquivos for aumentar o tamanho total do arquivo em mais de 10K, forneça um arquivo space para que o comando pkgadd possa permitir esse aumento. Para mais informações sobre o arquivo space, consulte Reservando espaço adicional em um sistema de destino.