> On 25/08/2021 20:22 Dan Conway <[email protected]> wrote: > > > Hello, > > I'm currently researching how services work within Dovecot and what > scope these services are capable of. For example, I created a service as > such: > > service myservice { > executable = /home/me/executable > type = worker > unix_listener myservice { > mode = 0666 > } > } > > > When data is provided to the myservice unix socket, Dovecot appears to > create a new process by executing "/home/me/executable". I found out > about "status updates" through examining the logs. At first I received this: > > master: Error: service(myservice): Initial status notification not > received in 30 seconds, killing the process > > What is this status notification? > > I found out that writing to file descriptor 5 from the executable does > seem to be valid. When I write out 12 bytes I don't get an error, but > when I write out 13 bytes I get the following: > > master: Error: service(dmon): service sent partial status update (13 bytes) > > What I've also noticed is that exiting 0 will cause Dovecot to spawn the > process again, in what appears to be infinitely. > > Are there any resources/documentation that I could reference to learn > more about how services work on a lower level besides just looking at > the source code? > > Thanks.
Making native services requires practically C program using lib-master. We provide a simple helpers called `script` and `login-script` which wrap your program as a Dovecot service and provide you parameters from stdin and, when possible, lets you write into stdout your reply. See https://github.com/dovecot/core/blob/master/src/util/script.c#L83 for provided input. You can use it like service foobar { executable = script /path/to/your/stuff unix_listener myservice { mode = 0666 } } btw, there is no `type = worker` setting, see https://doc.dovecot.org/configuration_manual/service_configuration/ Aki
