This continues to fail. I'm wondering if anyone has experience resolving
this problem below?

It appears that ExecuteStreamCommand cannot seem to find what is a shell
script pointing to an executable, despite my having fully qualified its
path (/bin/7za):

ExecuteStreamCommand[id=...] Failed to process session due to
java.io.IOException: Cannot run program "/bin/7za" (in directory /mnt/in")
error=2, No such file or directory: java.io.IOException:error=2, No such
file or directory
causes: java.io.IOException: Cannot run program "/bin/7za" (in directory
"/mnt/in")

Here is my updated configuration of my ESC processor:
Command Arguments Strategy     Command Arguments Property
Command Arguments     e;-si;${filename}
Command Path   /bin/7za
Ignore STDIN   false
Working Directory     /mnt/in  (this dir is owned by user nifi, which is
the user the nifi jvm starts by)
Argument Delimiter   ;
Output Destination Attribute     No value set
Max Attribute Length   256

I've not found a great deal of info through Google that details how to fix
this. There are a few articles that talk about ensuring the path includes
the directory where the binary or script lives, but it's not clear what
they mean. Do they mean where JAVA_HOME gets set in nifi.sh?

I tried also dropping my 7za script directly into the bin dir where nifi.sh
exists. My reasoning was that this would surely be a place in nifi's path.
But this test did not work.

Jim

On Thu, Sep 22, 2022 at 4:15 AM stephen.hindmarch.bt.com via users <
users@nifi.apache.org> wrote:

> A quick read of the 7-zip command line guide suggests you need the option
> “-si” to read from stdin.
>
>
>
> *Steve Hindmarch*
>
>
>
> *From:* James McMahon <jsmcmah...@gmail.com>
> *Sent:* 21 September 2022 17:01
> *To:* users@nifi.apache.org
> *Subject:* Re: ExecuteStreamCommand fails to extract archived files
>
>
>
> Now I see. So in the configuration of the ExecuteStreamCommand there was
> one thing we had not touched on, and it allowed this to work: Ignore STDIN
> must be set to true. I did that, I set my Command Arguments to
> e;/mnt/in/${filename} , and it worked as expected.
>
> Thanks again Mike.
>
> Jim
>
>
>
> On Wed, Sep 21, 2022 at 11:50 AM Mike Thomsen <mikerthom...@gmail.com>
> wrote:
>
> > ExecuteStreamCommand works on the contents of the incoming flowfile, is
> that understanding correct?
>
> 7za can't read the file from stdin. That's the problem AFAICT in your
> scenario.
>
> On Wed, Sep 21, 2022 at 11:26 AM James McMahon <jsmcmah...@gmail.com>
> wrote:
> >
> > Thank you Mike. May I ask a few follow-up Qs after trying this and
> failing still?
> >
> > ExecuteStreamCommand works on the contents of the incoming flowfile, is
> that understanding correct? If so, then why does it matter where the file
> sits on the filesystem if it will apply /bin/7za to the flowfile in the
> stream?
> >
> > So I have /bin/7za in the /bin directory, it's an executable program,
> and the user that the nif jvm is running as - user named nifi - has /bin in
> its path.
> >
> > I have an archive file I created in directory /mnt/in, and it is named
> testArchive.7z. I am successfully able to read that archive file in with a
> ListFile / FetchFile, and do get it in my stream. These are its attributes:
> > absolute.path   /mnt/in/
> > filename   testArchive.7z
> >
> > Is this java io exception telling us that it can't find the /bin/7za
> program, or it can't find the data itself? And if ExecuteStreamCommand is
> supposed to be applying that command to the flowfile in the stream, why is
> it important that the archive file exists on disk where
> ExecuteStreamCommand can find it?
> >
> > On Wed, Sep 21, 2022 at 11:07 AM Mike Thomsen <mikerthom...@gmail.com>
> wrote:
> >>
> >> To do this, you need to do UpdateAttribute (to set the temp folder
> >> location) -> PutFile -> ExecuteStreamCommand to ensure the flowfile's
> >> contents are staged where 7za can find them.
> >>
> >> I think the appropriate parameter would be something like this:
> >>
> >> Command Arguments: e;${path}/${filename}
> >>
> >> Assuming ";" is the argument delimiter.
> >>
> >> On Wed, Sep 21, 2022 at 10:45 AM James McMahon <jsmcmah...@gmail.com>
> wrote:
> >> >
> >> > Hello. I have a program /bin/7za that I need to apply to flowfiles
> that were created by 7za. One of them is testArchive.7z.
> >> >
> >> > I try to employ an ExecuteStreamCommand to extract from an incoming
> flowfile to into N output flowfiles in output stream, each representing one
> file from the contents in the flowfile.
> >> >
> >> > ESC throws error=2, No such file or directory.
> >> >
> >> > java.io.Exception: Cannot run program "/bin/7za"": error=2, No such
> file or directory
> >> >
> >> > My ExecuteStreamCommand processor has this configuration:
> >> > Command Arguments    e
> >> > Command Path   /bin/7za
> >> > Ignore STDIN   false
> >> > working Directory   no value set
> >> > Argument Delimiter   ;
> >> > (I do not set an Output Destination Delimiter, intending to send the
> output to output path "output stream" as separate flowfiles)
> >> >
> >> > How can I fix this problem?
> >> >
> >> > Thanks in advance,
> >> > Jim
>
>

Reply via email to