为什么我不能在shell脚本中使用catalina启动tomcat

时间:2013-11-20 22:17:31

标签: linux bash shell tomcat

我很好奇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扩展和引用删除一样简单,我会自己开枪,除非我做了一些让它不会丢失引用的东西。

2 个答案:

答案 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。

https://ubuntuforums.org/showthread.php?t=2032330