Cette étude de cas modifie les fichiers crontab lors de l'installation du package.
Cette étude de cas illustre les techniques suivantes :
Utilisation de classes et de scripts d'action de classe
Pour plus d'informations, reportez-vous à Rédaction de scripts d'action de classe.
Utilisation de la commande crontab dans un script d'action de classe.
La manière la plus efficace de modifier plusieurs fichiers lors de l'installation consiste à définir une classe et à fournir un script d'action de classe. Si vous avez utilisé la démarche de la classe build, vous devez fournir un script de classe build pour chaque fichier crontab modifié. La définition d'une classe cron représente une démarche plus globale. Pour modifier les fichiers crontaben suivant cette démarche, vous devez effectuer les opérations suivantes :
Définir les fichiers crontab à modifier dans le fichier prototype.
Créez une entrée dans le fichier prototype pour chaque fichier crontab à modifier. Définissez cron comme classe et e comme type de fichier de chaque fichier. Utilisez le nom réel du fichier à modifier.
Créer les fichiers crontab du package.
Ces fichiers contiennent les informations à ajouter aux fichiers crontab actuels du même nom.
Créer un script d'action de classe d'installation pour la classe cron.
L'exemple de script de classe i.cron effectue les procédures suivantes :
Il détermine l'ID utilisateur (UID).
Le script i.cron définit la variable user sur le nom de base du script de classe cron traité. Ce nom est l'UID. Par exemple, le nom de base de /var/spool/cron/crontabs/root est root, qui est également l'UID.
Il exécute la commande crontab, en se servant de l'UID et de l'option - l.
L'utilisation de l'option -l indique à crontab de transmettre dans le résultat standard, le contenu du fichier crontab de l'utilisateur défini.
Il envoie le résultat de la commande crontab dans un script sed qui supprime toute entrée ajoutée précédemment par cette technique d'installation.
Il place le résultat modifié dans un fichier temporaire.
Il ajoute le fichier de données de l'UID root (fourni avec le package) dans le fichier temporaire et insère une balise indiquant la provenance des entrées.
Il exécute la commande crontab avec le même UID et lui transmet les fichiers temporaires comme entrée.
Créer un script d'action de classe de suppression pour la classe cron.
Le script r.cron est identique au script d'installation à ceci près qu'il n'existe pas de procédure pour ajouter des informations dans le fichier crontab.
Ces procédures sont effectuées pour chaque fichier de la classe cron.
Les scripts i.cron et r.cron décrits ci-après sont exécutés par le superutilisateur. Modifier le fichier crontab d'un autre superutilisateur peut avoir des conséquences imprévisibles. Si nécessaire, remplacez l'entrée suivante de chaque script :
crontab $user < /tmp/$$crontab ||
par celle-ci :
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 |
Si la modification d'un groupe de fichiers augmente la taille globale des fichiers de plus de 10 Ko, fournissez un fichier space pour que la commande pkgadd puisse accommoder cette augmentation. Pour plus d'informations sur le fichier space, reportez-vous à Réservation d'espace supplémentaire sur un système cible.