docspell icon indicating copy to clipboard operation
docspell copied to clipboard

unoconv only works with a pre-existing `unoconv -l` listener

Open dontlaugh opened this issue 3 years ago • 3 comments

Here is my configuration

    unoconv = {
      command = {
        program = "unoconv"
        args = [
          "-f",
          "pdf",
          "-o",
          "{{outfile}}",
          "{{infile}}"
        ]
        timeout = "2 minutes"
      }
      working-dir = ${java.io.tmpdir}"/docspell-convert"
    }

Uploading a testdocument.odt yields this in the logs

Oct 30 18:33:01 joex docspell-joex[165]: level="INFO" levelValue=300.0 message=">>> 2022-10-30T18:33:01.812099Z Info 4htHaYYYR.../coleman/re-process-item/Low: ===== Start reprocessing ======" fileName="LogSink.scala" className="docspell.scheduler.impl.LogSink" methodName="logInternal" line=41 column=null jobId="4htHaYYYRPK-sDtUCcGN2b5-sfayKYGcyWT-UY3L7M22n9D" task="re-process-item" group="coleman" jobInfo="4htHaYYYR.../coleman/re-process-item/Low" timestamp=1667154781813 date=2022-10-30 time=18:33:01.813+000
Oct 30 18:33:01 joex docspell-joex[165]: level="INFO" levelValue=300.0 message=">>> 2022-10-30T18:33:01.851515Z Info 4htHaYYYR.../coleman/re-process-item/Low: Converting file Some(testdocument.odt) (application/vnd.oasis.opendocument.text) into a PDF" fileName="LogSink.scala" className="docspell.scheduler.impl.LogSink" methodName="logInternal" line=41 column=null jobId="4htHaYYYRPK-sDtUCcGN2b5-sfayKYGcyWT-UY3L7M22n9D" task="re-process-item" group="coleman" jobInfo="4htHaYYYR.../coleman/re-process-item/Low" timestamp=1667154781852 date=2022-10-30 time=18:33:01.852+000
Oct 30 18:33:02 joex docspell-joex[165]: level="ERROR" levelValue=500.0 message=">>> 2022-10-30T18:33:02.778524Z Error 4htHaYYYR.../coleman/re-process-item/Low: PDF conversion failed: Command result=251. No output file found.. Go without PDF file" fileName="LogSink.scala" className="docspell.scheduler.impl.LogSink" methodName="logInternal" line=51 column=null jobId="4htHaYYYRPK-sDtUCcGN2b5-sfayKYGcyWT-UY3L7M22n9D" task="re-process-item" group="coleman" jobInfo="4htHaYYYR.../coleman/re-process-item/Low" timestamp=1667154782783 date=2022-10-30 time=18:33:02.783+000

Running unoconv with the same arguments manually converts the pdf successfully, so I doubt this is an issue with missing libraries.

One clue is this note from man unoconv

       -n, --no-launch
           By default if no listener is running, unoconv will launch its own (temporary)
           listener to make sure the conversion works. This option will abort the conversion
           if no listener is found, rather than starting our own listener.

I'm not sure, but unoconv might fork/daemonize a listener process in such a way that makes it inaccessible.

I'm going to make a dedicates systemd service that runs unoconv -l, since it does make things run faster, like you mention in the docs.


Update: I also tried setting -T 5, but it still didn't work.

       -T, --timeout
           When unoconv starts its own listener, try to connect to it for an amount of
           seconds before giving up. Increasing this may help when you receive random errors
           caused by the listener not being ready to accept conversion jobs.

This still didn't work. Only a pre-existing listener spawned with unoconv -l lets me process .odt LibreOffice docs.

dontlaugh avatar Oct 31 '22 17:10 dontlaugh

I actually never tried without the listener tbh. It should work afaik, but maybe some environments make it harder to function properly (e.g. when it is run without terminal or inside a container…). I also use a systemd unit that runs unoconv -l.

You could also go for the successor of unoconv: unoserver (or plain libreoffice). I haven't bothered yet, because it just works for me. 😄

eikek avatar Oct 31 '22 18:10 eikek

Out of curiosity, does your systemd unit file for unoconv use Type=simple (the default) or forking?

dontlaugh avatar Oct 31 '22 18:10 dontlaugh

I'm using the default, simple.

eikek avatar Oct 31 '22 18:10 eikek