On Fri, 06.01.12 14:55, Richard Shaw (hobbes1069(a)gmail.com) wrote:
Ok, I didn't know how to make the subject any shorter, but
there's a
big BUT in this, but (hehe) first a summary.
I have a user of MythTV that has capture devices which require a
firmware be uploaded. As a consequence, the /dev paths are not always
created by the time mythbackend tries to start. A solution to this is
to create a mythbackend.path unit file which will wait for the devices
to be created, BUT, they occasionally fail to initialize and the path
unit file doesn't seem to have a timeout option (or option for what to
do once the timeout is reached).
A partial solution would be to use a timer unit file, but it too
doesn't do quite what I need. It doesn't appear that I can wait for
the start of one unit file (mythbackend.path) while starting a
different unit file (mythbackend.service) once the timeout is reached.
I could use the same 'After=...' as I have on the main service file
which would approximate the same startup time, but that's rather
hackish. I am assuming that having two unit files (a path and a timer)
trying to start the same service isn't an issue and that the first one
wins.
Below is the entire message I was sent with his solution which is even
more complicated than what I'm proposing, but appears to work.
Drop a udev rules file into /lib/udev/rules.d (if this is for a package)
or /etc/udev/rules.d (if this is just a local installation) where you
match the device and add the systemd tag to it:
SUBSYSTEM=="foobar", SOMEMOREMATCHESHERE, TAG+="systemd"
(Replace foobar with the subsystem name of your device and
SOMEMOREMATCHESHERE with some sensible matches that identify your device
uniquely).
That will result in a .device unit to show up in systemd whenever the
device is available, named after the /dev path (or /sys path if it
doesn't have a device node).
Then, you can add the following to your service:
Wants=dev-waldo.device
After=dev-waldo.device
(Assuming your device is called /dev/waldo)
And that should do the job.
Lennart
--
Lennart Poettering - Red Hat, Inc.