Este caso práctico modifica los archivos crontab durante la instalación del paquete.
Este caso práctico muestra las técnicas siguientes:
Uso de secuencias de comandos de acción de clase y clases
Para obtener más información, consulte Escritura de secuencias de comandos de acción de clase.
Uso del comando crontab en una secuencia de comandos de acción de clase.
El modo más eficaz de modificar más de un archivo durante la instalación es definir una clase y ofrecer una secuencia de comandos de acción de clase. Si se ha servido de la aproximación a la clase build, debe entregar una secuencia de comandos de clase build para cada archivo crontab modificado. La definición de una clase cron proporciona una aproximación más general. Para editar los archivos crontab con esta aproximación, debe:
Definir los archivos crontab que se van a modificar en el archivo prototype.
Cree una entrada en el archivo prototype para cada archivo crontab que se modificará. Defina la clase como cron y el tipo de archivo como e para cada archivo. Use el nombre real del archivo que se va a modificar.
Crear los archivos crontab para el paquete.
Estos archivos contienen la información que desea agregar a los archivos crontab existentes del mismo nombre.
Crear una secuencia de comandos de acción de clase de instalación para la clase cron.
La secuencia de comandos i.cron de ejemplo ejecuta los procesos siguientes:
Determina el ID de usuario (UID).
La secuencia de comandos i.cron configura la variable usuario con el nombre base de la secuencia de comandos de clase cron que se está procesando. Ese nombre es el UID. Por ejemplo, el nombre base de /var/spool/cron/crontabs/root es raíz, además del UID.
Ejecuta crontab mediante el UID y la opción -l.
El uso de la opción -l indica a crontab que envíe el contenido del archivo crontab del usuario definido a la salida estándar.
Dirige la salida del comando crontab a una secuencia de comandos sed que suprime las entradas anteriores agregadas con esta técnica de instalación.
Coloca la salida modificada en un archivo temporal.
Agrega el archivo de datos del UID raíz (que se entregó con el paquete) al archivo temporal y agrega una etiqueta para que sepa de dónde vienen estas entradas.
Ejecuta crontab con el mismo UID y le entrega el archivo temporal como entrada de información.
Crear una secuencia de comandos de acción de clase de eliminación para la clase cron.
La secuencia de comandos r.cron es la misma que la secuencia de comandos de instalación excepto que no hay procesos para agregar información al archivo crontab.
Estos procesos se llevan a cabo para cada archivo en la clase cron.
Un superusuario ejecuta las secuencias de comandos i.cron y r.cron que se describen a continuación. La modificación del archivo crontab de otro usuario puede tener resultados imprevistos. Si fuera necesario, cambie la entrada siguiente de cada secuencia de comandos:
crontab $user < /tmp/$$crontab ||
hasta
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 modificación de un grupo de archivos aumenta el tamaño total del archivo en más de 10K, proporcione un archivo space para que el comando pkgadd pueda permitir este aumento. Para obtener más información sobre el archivo space, consulte Reserva del espacio adicional en un sistema de destino.