O incrontab do usuário não funciona (apenas root) quando o incrond é executado como um serviço

O incrontab do usuário não funciona (apenas root) quando o incrond é executado como um serviço

Aqui está meu 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/

Eu testei várias vezes mudando algumas coisas, não há como fazê-lo funcionar quando o incrond é executado como um serviço (usando openrc).

Se eu executar o incrond em primeiro plano ( incrond -n), então o incrontab do Tony funciona

Se eu definir o incrontab do root como o fornecido acima, ele funcionará mesmo quando executado como um serviço.

Meu Tony está em /etc/incron.allow:

root
tony

E não há /etc/incron.deny.

Eu até tentei com um incrontab muito mais simples:

/tmp/foo IN_ATTRIB touch /tmp/bar

Os resultados são os mesmos.

Como fazer o incrontab do usuário funcionar?

Responder1

Se o binário do incrontab (que não conheço, nunca usei) não tiver seu bit SGID definido, isso pode causar esse tipo de comportamento estranho.

Configure-o com chmod g+s /path/to/binary(/usr/bin/incrontab, talvez?)

Você pode avaliar se está definido por:

ls -l /path/to/binary

(exemplo)

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

Responder2

Enfrentei um problema semelhante (foi assim que encontrei esta pergunta).

Se o comando a seguir fizer funcionar,

incrontab -n

o problema pode ser que o serviço incron/incrond não esteja em execução. Verifique se ele está rodando e se está habilitado para rodar na inicialização (caso o sistema seja reiniciado).

O outro problema que enfrentei foi por causa de um loop infinito que criei inadvertidamente.
Se o seu script modificar qualquer arquivo na mesma pasta que o incron está monitorando, ele continuará acionando eventos e cada evento causará um novo processo (via fork()). Em breve, o serviço não poderá mais desembolsar. O log de serviço mostra o seguinte erro neste caso.

cannot fork process: resource temporarily unavailable

Neste ponto,

  • parar o serviço
  • altere o script para que ele não modifique os arquivos dentro da pasta monitorada
  • reinicie o serviço

informação relacionada