Uploaded image for project: 'Apache Jena'
  1. Apache Jena
  2. JENA-1219

fuseki init script problems - FUSEKI_USER doesn't work - shell quoting wonky

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • Fuseki 2.3.1
    • Fuseki 2.4.1
    • Fuseki
    • None
    • RHEL 6

    • Patch

    Description

      another init script issue.

      If FUSEKI_USER is defined, the script attempts to su to that user. Here's the original code snippet.

            su - "$FUSEKI_USER" -c "
              log_daemon_msg "Redirecting Fuseki stderr/stdout to $FUSEKI_LOGS_STDERROUT"
              exec ${RUN_CMD[*]} &> '$FUSEKI_LOGS_STDERROUT' &
              disown \$!
              echo \$! > '$FUSEKI_PID'"
      

      There are several problems with this.

      0) log_daemon_msg doesn't exist in this subshell so it throws an error. I filed a separate bug about this.

      1) the quoting is problematic, so as written, it doesn't successfully start the software.

      I think what happens is that the double-quote before the word "Redirecting" closes out the argument to -c

      then the exec happens, but the FUSEKI_LOGS_STDERROROUT is not expanded because it's inside single quotes. So no log, or possibly there's a file sitting somewhere called literally $FUSEKI_LOGS_STDERROROUT - but only if the FUSEKI_USER has permissions to write in the current directory.

      Without the log file, I'm not sure why it doesn't start properly, i didn't troubleshoot further down this path.

      2) Normally if you "exec" something, the exec'd program replaces the running process. Since the script has the & to background the process, it does that instead. Weird. It's counter-intuitive, though, and unless there's a good reason to have the exec I would suggest removing it. It seems like the subshell + background + disown should provide the functionality that you would normally expect from exec.

      I would suggest the following, but I'm not entirely sure of the design goal behind the code snippet so i am not sure it meets the needs.

            su "$FUSEKI_USER" -c "
              echo Redirecting Fuseki stderr/stdout to $FUSEKI_LOGS_STDERROUT
              ${RUN_CMD[*]} &> $FUSEKI_LOGS_STDERROUT &
              disown \$!
              echo \$! > $FUSEKI_PID "
      

      Attachments

        1. stderrout.log
          0.9 kB
          Dan Pritts
        2. shx-out.txt
          6 kB
          Dan Pritts
        3. etc-default-fuseki
          2 kB
          Dan Pritts

        Activity

          People

            andy Andy Seaborne
            danpritts Dan Pritts
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: