I’ve been having problems with incrond for months; after trying to upgrade from version 0.5.10, incrond would not trigger after a specified event occurred in the monitored path.
After upgrading to version 0.5.12-9 (I couldn’t use 0.5.10 because of security policies), incrond has started behaving in a completely random way: sometimes it was triggered as expected but some other times (way too many), nothing was happening.
This was the entry in incrontab:
/home/elena/upload IN_CLOSE_WRITE /bin/find $@ -type f -exec /bin/chmod g+rw {} \+
Writing a script and adding it to crontab was out of question; here is where systemd came in handy, with path units.
A .path unit (systemd.path) monitors a file or directory and it calls a .service unit (systemd.service), usually with the same name, when something happens to the monitored file or directory.
In my case, I simply had to fix group permission for files in a specific directory.
fixperm.path
[Unit] Description=changing group permissions [Path] PathModified=/home/compuk/upload PathModified=/home/compuk/upload/backup
Note: systemd.path is not recursive! You must specify every path you need to monitor.
fixperm.service
[Unit]
Description=service for fixperm.path
[Service]
Type=oneshot
User=elena
ExecStart=/usr/bin/find /home/compuk/upload -type f -exec /bin/chmod -R g+rw {} \;
ExecStart=/usr/bin/find /home/compuk/upload/backup -type f -exec /bin/chmod -R g+rw {} \;
Note: I didn’t use RemainAfterExit=Yes in the service unit because, if the service doesn’t die (inactive) every time, the .path unit will not trigger properly.