¿Puede un solo usuario tener varios archivos crontab?

¿Puede un solo usuario tener varios archivos crontab?

Supongamos que estoy creando dos archivos crontab.

  1. /tmp/my-crontab
  2. /root/my-alternate-crontab

Cada archivo crontab está programado para ejecutar diferentes scripts.

Cuando inicio el cronjob, el primero se reemplaza por el anterior.

crontab -u smarak /tmp/my-crontab
crontab -u smarak /root/my-alternate-crontab

¿Es posible lo anterior para un solo usuario?

Respuesta1

Dos formas de evitar tener un único crontab.

Coloque sus entradas de crontab en archivos en algún directorio, como ~/crontab.d/thisandthat.cron, luego confirme cualquier cambio en el crontab del sistema con:

cat ~/crontab.d/*.cron | crontab -

La extensión .cronsirve para evitar incluir accidentalmente archivos de copia de seguridad de los editores. Tenga en cuenta que, dado que todos los archivos están concatenados, cualquier variable establecida en los archivos también se aplicará a los archivos que vengan después.

También podrías hacer algo similar a cómo /etc/cron.hourlyse implementan y amigos en Debian. El principal /etc/crontabcontiene reglas como esta:

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly

Puede disponer que una sola entrada de crontab ejecute varios programas. Debian run-parts dires similar for f in dir/* ; do "$f" ; doneexcepto que omite nombres de archivos impares, nuevamente para evitar ejecutar archivos de respaldo creados por editores, etc.

Respuesta2

No. Cada usuario tiene un crontab. ¿Por qué? Porque el crontab es la "tabla" ("pestaña") de todos los trabajos cron asociados con un solo usuario.

Si desea ejecutar varias cosas con cron, simplemente agregue varias líneas en su crontab.

Si tiene varios archivos con especificaciones de trabajo cron, simplemente concatenelos:

cat crontab1 crontab2 crontab3 >my-crontab
crontab my-crontab

Respuesta3

Puede simplemente leer la entrada real y agregar la nueva inmediatamente después.
Una vez que tengas este ejecutándose:

crontab -u smarak /tmp/my-crontab

Lo ideal sería hacer algo como:

crontab -u smarak <(cat /root/mi-crontab-alternativo) <(crontab -l)

Pero parece que crontab no acepta el formulario anterior, así que aquí tienes la solución:

cat /root/my-alternate-crontab <(crontab -l)| crontab -u smarak -

Esto funciona para mí. Espero que ayude.

información relacionada