[
https://issues.apache.org/jira/browse/JENA-1219?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15402474#comment-15402474
]
Dan Pritts commented on JENA-1219:
----------------------------------
I thought that the whole point of the {{disown}} command was to disassociate
the child from the parent. So it seems redundant to me to have that and the
exec. Given the unusual nature of doing 'exec foo &' might I suggest that
you add a comment, explaining the intent?
Regardless, though, I mostly don't care, as long as it works. It didn't, for
me; as shipped, so i started poking at it and found it difficult to understand
what was going on. Part of the problem was extraneous double quoting due to
the {{log_daemon_msg}} issue, but it still doesn't work.
I grabbed the latest script from git and my current problem is:
{noformat}
[2016-08-01 13:06:40] Server ERROR Can't find resourceBase (tried webapp,
src/main/webapp, /home/fuseki/./webapp and /home/fuseki/./src/main/webapp)
[2016-08-01 13:06:40] Server ERROR Failed to start
{noformat}
I believe this is because a {{su -}} shell starts in the user's home directory,
rather than the current directory, and {{RUN_CMD}} doesn't specify the full
path to the software.
Inspecting the java source I see a comment that FUSEKI_HOME can't be used to
find this resource base because the variable hasn't been initialized yet.
https://github.com/apache/jena/blob/master/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/jetty/JettyFuseki.java
I'm attaching sh -x output, the full log file, and /etc/default/fuseki
contents.
I'm not sure of the proper solution. cd to FUSEKI_HOME in the su'd shell?
> fuseki init script problems - FUSEKI_USER doesn't work - shell quoting wonky
> ----------------------------------------------------------------------------
>
> Key: JENA-1219
> URL: https://issues.apache.org/jira/browse/JENA-1219
> Project: Apache Jena
> Issue Type: Bug
> Components: Fuseki
> Affects Versions: Fuseki 2.3.1
> Environment: RHEL 6
> Reporter: Dan Pritts
> Priority: Minor
>
> another init script issue.
> If FUSEKI_USER is defined, the script attempts to su to that user. Here's
> the original code snippet.
> {noformat}
> 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'"
> {noformat}
> 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.
> {noformat}
> su "$FUSEKI_USER" -c "
> echo Redirecting Fuseki stderr/stdout to $FUSEKI_LOGS_STDERROUT
> ${RUN_CMD[*]} &> $FUSEKI_LOGS_STDERROUT &
> disown \$!
> echo \$! > $FUSEKI_PID "
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)