好的,所以我正在尝试执行以下代码:
`#{@daemon_path} --name=#{@app_name} --command=#{@java_path} -- -jar #{jetty_jar} #{@war_path} #{random_port}` sleep(10) #give war time to error out and die if its going to `#{@daemon_path} --running --name=#{@app_name}`
变量值为:
- @daemon_path = path/to/daemon(对我的系统正确)
- @app_name = foobarbazquux
- @command = path/to/java(对我的系统也正确)
- jetty_jar = 一种方法,该方法返回指向独立码头容器的自定义 jar 的路径(已测试;有效)
- @war_path = /path/to/helloworld/war(在独立码头容器中测试;有效)
- random_port = 一种返回 10000 到 65535 之间的随机端口号的方法(暂时将其更改为返回 8000 或 22,具体取决于我是否想启动战争失败)
我收到此错误(在 bash 中检查命令,它们工作正常):
无效参数:未提供命令
用法:守护进程 [options] [--] [cmd arg...]
我通过在上述命令周围加上引号来修复上述错误,如下所示:
"`#{@daemon_path} --name=#{@app_name} --command=#{@java_path} -- -jar #{jetty_jar} #{@war_path} #{random_port}`"
"`#{@daemon_path} --running --name=#{@app_name}`"
好的,所以在代码执行后,我用 $ 检查输出?并注意 0 返回码。它应该是 1。我在 bash 中运行它,我得到一个 1。如果我手动为每个变量放入所有正确的值,它就可以正常工作。
此外,如果我执行一个脚本,传入所有的值,如下所示:
`./daemon_script_file #{@daemon_path} #{@app_name} #{@java_path} #{jetty_jar} #{@war_path} #{random_port}`
到脚本守护程序脚本文件:
#!/bin/bash
set -x
d_bin=$1
name=$2
cmd=$3
jar=$4
war=$5
port=$6
$d_bin --name=$name --command=$cmd -- -jar $jar $war $port
sleep 10
$d_bin --name=$name --running
result=$?
exit $result
我得到以下调试跟踪输出:
+ d_bin=/usr/bin/daemon
+ name=
+ cmd=
+ jar=
+ war=
+ port=
+ /usr/bin/daemon --name= --command= -- -jar
+ sleep 10
+ /usr/bin/daemon --name= --running
+ result=1
+ exit 1
sh: 2: foobarbazquux: not found
invalid file (bad magic number): Exec format error
有没有人知道为什么?我在这里做了一些非常愚蠢的事情吗?
作为旁注,字符串:
"#{@daemon_path} --name=#{@app_name} --command=#{@java_path} -- -jar #{jetty_jar} #{@war_path} #{random_port}"
决议:
"/usr/bin/daemon --name=foobarbazquux --command=/usr/java/jdk1.7.0_21/bin/java -- -jar /home/nterry/JettyContainer-1.0.b4-jar-with-dependencies.jar /home/nterry/helloworld.war 8080"
这是完全正确的