我很好奇su -c“cmd arg”和tomcat在shell脚本中是如何工作的。
从cmd行手动,我跑了:
su -m tomcat -c /path/to/tomcat/catalina.sh start
这不起作用。但是,如果我将cmd放在引号中,则可以使用
su -m tomcat -c "/path/catalina.sh start"
在shell脚本中(试图运行chkconfig以便它自动启动),我有这样的事情:
START="/path/catalina.sh start"
...
...
su -m tomcat -c "$START"
该命令在引号中,因为我手动发现需要引号。 当我运行脚本时,输出返回:
Using CATALINA_BASE: /apps/local/apache-tomcat-7.0.42
Using CATALINA_HOME: /apps/local/apache-tomcat-7.0.42
Using CATALINA_TMPDIR: /apps/local/apache-tomcat-7.0.42/temp
Using JRE_HOME: /usr/java/default
Using CLASSPATH: /apps/local/apache-tomcat-7.0.42/bin/bootstrap.jar:/apps/local/apache-tomcat-7.0.42/bin/tomcat-juli.jar
Usage: catalina.sh ( commands ... )
commands:
debug Start Catalina in a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the current window
run -security Start in the current window with security manager
start Start Catalina in a separate window
start -security Start in a separate window with security manager
stop Stop Catalina, waiting up to 5 seconds for the process to end
stop n Stop Catalina, waiting up to n seconds for the process to end
stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running
stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running
configtest Run a basic syntax check on server.xml - check exit code for result
version What version of tomcat are you running?
Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined
这个输出就像我手动运行catalina.sh w / o任何启动/停止参数一样。
为什么在shell脚本中忽略启动/停止选项?是的,我用startup.sh和shutdown.sh替换了catalina.sh,这使得脚本工作但我仍然好奇为什么在脚本中,su -c“cmd arg”似乎忽略了命令的参数部分。 / p>
提前感谢您的解释。如果它像shell扩展和引用删除一样简单,我会自己开枪,除非我做了一些让它不会丢失引用的东西。
答案 0 :(得分:0)
我在tomcat init文件中使用以下内容:
...
su -l $TOMCAT_USER -c $CATALINA_HOME/bin/startup.sh
...
-l创建一个登录shell,允许您传递所需的内容。
答案 1 :(得分:0)
这也可能与“ setenv.sh”有关
如果创建了setenv.sh,并且行以“ set X = Y”开头,则由于“ set”,您将遇到此问题。删除“设置”,然后尝试再次重新启动tomcat。