Die Incrontab des Benutzers funktioniert nicht (nur die von Root), wenn Incrond als Dienst ausgeführt wird

Die Incrontab des Benutzers funktioniert nicht (nur die von Root), wenn Incrond als Dienst ausgeführt wird

Hier ist meine Incrontab (Tonys Incrontab):

/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/

Ich habe es mehrmals getestet und dabei einige Dinge geändert, aber es gibt keine Möglichkeit, es zum Laufen zu bringen, wenn incrond als Dienst ausgeführt wird (mithilfe von openrc).

Wenn ich incrond im Vordergrund ausführe ( incrond -n), dann funktioniert Tonys incrontab

Wenn ich die Incrontab von Root auf den oben angegebenen Wert einstelle, funktioniert es auch, wenn es als Dienst ausgeführt wird.

Mein Tony ist in /etc/incron.allow:

root
tony

Und es gibt kein /etc/incron.deny.

Ich habe es sogar mit einer viel einfacheren Incrontab versucht:

/tmp/foo IN_ATTRIB touch /tmp/bar

Die Ergebnisse sind die gleichen.

Wie lässt sich die Incrontab des Benutzers zum Laufen bringen?

Antwort1

Wenn das SGID-Bit im Binärcode für incrontab (den ich nicht kenne, da ich ihn nie verwendet habe) nicht gesetzt ist, könnte dies zu dieser Art von seltsamem Verhalten führen.

Legen Sie es mit chmod g+s /path/to/binary(/usr/bin/incrontab, vielleicht?) fest.

Sie können anhand folgender Punkte feststellen, ob es festgelegt ist:

ls -l /path/to/binary

(Beispiel)

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

Antwort2

Ich hatte ein ähnliches Problem (so bin ich auf diese Frage gestoßen).

Wenn der folgende Befehl funktioniert,

incrontab -n

Das Problem könnte sein, dass der Dienst incron/incrond nicht ausgeführt wird. Überprüfen Sie, ob er ausgeführt wird und ob er für die Ausführung beim Booten aktiviert ist (falls das System neu gestartet wird).

Das andere Problem, mit dem ich konfrontiert war, war eine Endlosschleife, die ich versehentlich erzeugt hatte.
Wenn Ihr Skript eine Datei in dem Ordner ändert, den incron überwacht, löst es weiterhin Ereignisse aus und jedes Ereignis verursacht einen neuen Prozess (über fork()). Bald kann der Dienst nicht mehr verzweigen. Das Dienstprotokoll zeigt in diesem Fall den folgenden Fehler an.

cannot fork process: resource temporarily unavailable

An dieser Stelle,

  • den Dienst beenden
  • Ändern Sie das Skript, sodass es keine Dateien im überwachten Ordner ändert.
  • Starten Sie den Dienst neu

verwandte Informationen