¿Cómo deshabilitar temporalmente los cronjobs de un usuario?

14

¿Cómo deshabilito temporalmente uno o más trabajos cron de los usuarios? En particular, no quiero suspender los derechos de cron del usuario, simplemente no despedir ninguno de sus trabajos.

Estoy en sistemas SLES 11 SP2 y SP3

Dinesh
fuente
¿No puede simplemente usar el -u userinterruptor del crontabcomando y poner un #carácter de comentario delante de los trabajos para deshabilitar para el usuario dado?
Janis
@Janis, entonces necesito hacer un seguimiento de lo que el usuario (hay muchos) ya había comentado, además, el usuario puede continuar y agregar otra cosa (no los estoy agregando a /etc/cron.deny). Demasiado trabajo manual :(
Dinesh
Dinesh, entendí mal que quieres un control granular sobre lo que desactivas.
Janis

Respuestas:

10

touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$usernamedebería hacer el truco. Restaure con chmod 600y touch(debe cambiar el archivo mtime para que cron (intente) volver a cargarlo).

Al menos en Debian y probablemente con Vixie cron en general, chmod 400 /var/spool/cron/crontabs/$usernametambién funciona, porque esa implementación insiste en que los permisos sean exactamente 600. Sin embargo, esto solo dura hasta que el usuario ejecuta el crontabcomando.

Si quieres una forma sólida, no creo que haya nada mejor que mover temporalmente su crontab fuera del camino o cambiar los permisos, y agregarlos temporalmente /etc/cron.deny.

Gilles 'SO- deja de ser malvado'
fuente
Gracias. En mi sistema es / var / spool / cron / tabs / $ username. Pero aún se ejecuta, incluso después del chmod.
Dinesh
Después de cambiar los permisos del archivo, también necesitaba detener / reiniciar cron. Pensé que probablemente sea porque cron podría estar guardando las cosas en la memoria. Entonces agregué touch $usernamedespués del chmod. Pero eso no ayudó. (por cierto entendí tu punto cron.deny)
Dinesh
@Dinesh De hecho, debe actualizar el archivo mtime o, de lo contrario, cron cree que no ha cambiado y mantiene la información almacenada en caché. Noté esto mientras probaba ayer, pero olvidé mencionarlo en mi respuesta, lo siento.
Gilles 'SO- deja de ser malvado'
Si desea deshabilitar para todos los usuarios estándar solo:chgrp root /var/spool/cron/crontabs
shrimpwagon
9

¿Qué tal algo como esto para deshabilitar un crontab de usuario?

crontab -l -u [username] >/tmp/[username].cron.tmp
crontab -r -u [username]

y para volver a habilitar:

crontab -u [username] /tmp/[username].cron.tmp

Esto tiene la ventaja adicional de que puede ejecutarlo como ese usuario sin necesidad de root (simplemente quite el parámetro -u).

Braindigitalis
fuente
0

Si está utilizando Debian, esto solo se aplica a Debian AFAIK :

Puede hacerlo agregando un punto al nombre del cronjob.

El comportamiento se menciona en los documentos oficiales de Debian:

https://www.debian.org/doc/debian-policy/#cron-job-file-names

El nombre de un archivo de trabajo cron no debe incluir ningún punto o más caracteres (. O +), ya que esto hará que cron ignore el archivo. Se deben usar guiones bajos (_) en lugar de. y + personajes.

Wadih M.
fuente
0

Si solo desea detener completamente todos los crontrabajos por un tiempo, por ejemplo, mientras realiza el mantenimiento del sistema con el que podrían interactuar mal, los comandos normalmente son

systemctl stop crond.service

y, para reanudar

systemctl start crond.service

Supongo que necesita autoridad de root o rueda para ejecutarlos; si es necesario, ejecútelos a través de sudo o (último recurso) inicie sesión como root.

Exagerar para la pregunta específica planteada, pero proporciona "compras únicas" y no requiere jugar con el sistema de archivos o archivos temporales.

Felix Domestica
fuente
3
Como esto desactiva el cron para todos los usuarios, realmente no responde la pregunta.
Scott
-1

Estoy de acuerdo, el camino a través de systemctl es el que hay que tomar. En frambuesa, los dedos del pie serían

sudo systemctl stop cron.service
sudo systemctl start cron.service
Juergen
fuente
1
Esto detendrá todo el cronservicio. El OP quería poder elegir qué crontabs de usuarios deshabilitar.
roaima
1
También es idéntico a otra respuesta.
roaima