我的 .sh 文件中有以下新行
su --session-command='$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile' $serviceUser || return 1
当我使用双引号时,它有点起作用,但 pidFile 有错误的 pid,它偏离了一个。研究的解决方案是使用单引号,但我无法让单引号起作用。
我现在得到 2 个错误
bash:$pidFile:模糊重定向
bash:$serviceLogFile:模糊重定向
似乎我不能使用变量或将变量输出到单引号中的变量?
这行代码几乎可以工作,但是 pid 偏离了一个。
下面这段代码将从启动时开始,但是 pid 是错误的。
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
必须替换这个有缺陷的旧两行代码。
cmd="nohup $javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile"
# Don't forget to add -H so the HOME environment variable will be set correctly.
sudo -u $serviceUser -H $SHELL -c "$cmd" || return 1
旧代码运行良好,但无法从启动时启动。
答案1
&
进程 ID 少了一个,因为您在 后面多加了一个$javaCommandLine
。换句话说,您在调用 之前已经在后台放置了两个进程echo $!
,因此获取的是 PID,>>$serviceLogFile 2>&1
而不是$javaCommandLine
。这两部分应该放在一个中,如旧的 2 行代码所示
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
您可能需要将其更改为 -
su --session-command="$javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1