0

I'm trying to use a systemd path + service to trigger a python script when a file changes.

I'm finding that the script is triggered on startup, independent of when I change the file.

Here's the snippet of my .path file:


PathChanged=/home/pi/network/trigger.txt
Unit=monitor.service

currently while I'm testing, monitor.service simply triggers a script that writes to a log file with a timestamp. here's a snippet of the log file:

 14:26:40 Friday September 3, 2021 file modified

and when I do stat /home/pi/network/trigger.txt,

Access: 2021-07-14 17:07:42.871258883 -0400
Modify: 2021-08-24 16:53:00.879999930 -0400
Change: 2021-08-24 16:53:00.879999930 -0400

Clearly then, the file hasn't been modified, yet the .path unit triggers on startup regardless. What's going on here?

2
  • Just confirming: monitor.service doesn't have a [Install] WantedBy= does it? I've seen people make that mistake before: enabling the service which should only be triggered by a path/socket.
    – Stewart
    Commented Sep 4, 2021 at 8:32
  • Yeah you're right, I had enabled the service. This solved the problem. Thanks!
    – sfraser
    Commented Sep 8, 2021 at 0:47

1 Answer 1

0

The path shouldn't trigger monitor.service on boot, but it's a common mistake to have monitor.service itself enabled on boot.

If monitor.service contains the usual:

[Install]
WantedBy=multi-user.target

Then monitor.service will activate on boot OR whenever it gets triggers by your *.path.

Solution 1:

If this is a 3rd party service, then disable the service. That will prevent it from activating on boot, but will not prevent it from being triggered by your *.path:

sudo systemctl disable monitor.service

Solution 2:

If you wrote monitor.service yourself, then simply delete the [Install] section from monitor.service.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .