El incrontab del usuario no funciona (solo el de root) cuando incrond se ejecuta como un servicio

El incrontab del usuario no funciona (solo el de root) cuando incrond se ejecuta como un servicio

Aquí está mi incrontab (incrontab de Tony):

/home/tony/Workspace/cocoonr/ui/static/ui/img/icons/vector IN_MODIFY,IN_CREATE,IN_MOVED_TO /bin/sh /home/tony/Workspace/cocoonr/boilerplate/svg2djangohtml $@/$# /home/tony/Workspace/cocoonr/ui/templates/inc/icons/

Lo probé varias veces cambiando algunas cosas, no hay forma de hacerlo funcionar cuando incrond se ejecuta como un servicio (usando openrc).

Si ejecuto incrond en primer plano ( incrond -n), entonces el incrontab de Tony funciona.

Si configuro el incrontab de root con el indicado anteriormente, funciona incluso cuando se ejecuta como un servicio.

Mi tony está en /etc/incron.allow:

root
tony

Y no hay /etc/incron.deny.

Incluso lo intenté con un incrontab mucho más simple:

/tmp/foo IN_ATTRIB touch /tmp/bar

Los resultados son los mismos.

¿Cómo hacer que funcione el incrontab del usuario?

Respuesta1

Si el binario para incrontab (que no sé, nunca lo usé) no tiene su bit SGID configurado, eso podría causar este tipo de comportamiento extraño.

Configúrelo con chmod g+s /path/to/binary(/usr/bin/incrontab, ¿tal vez?)

Puedes evaluar si está configurado por:

ls -l /path/to/binary

(ejemplo)

ls -l /usr/bin/crontab
-rwxr-s--x 1 root crontab 44336 Jun 23 18:47 /usr/bin/crontab

Respuesta2

Me enfrenté a un problema similar (así es como encontré esta pregunta).

Si el siguiente comando hace que funcione,

incrontab -n

El problema podría ser que el servicio incron/incrond no se esté ejecutando. Compruebe si se está ejecutando y si está habilitado para ejecutarse al arrancar (en caso de que se reinicie el sistema).

El otro problema al que me enfrentaba se debía a un bucle infinito que había creado sin darme cuenta.
Si su secuencia de comandos modifica cualquier archivo en la misma carpeta que incron está observando, sigue activando eventos y cada evento provoca un nuevo proceso (a través de fork()). Pronto, el servicio no podrá bifurcarse más. El registro de servicio muestra el siguiente error en este caso.

cannot fork process: resource temporarily unavailable

En este punto,

  • detener el servicio
  • cambiar el script para que no modifique los archivos dentro de la carpeta vigilada
  • reiniciar el servicio

información relacionada