1

我需要更改要由非 root 用户执行的 tomcat 进程。创建用户tomcat并将其放入tomcat_group组。更改了权限。然后更改init.d中的启动脚本。

我以 root 用户身份运行的旧脚本是

#!/bin/bash
# description: Tomcat Start Stop Restart
# processname: tomcat
# chkconfig: 234 20 80
JAVA_HOME=/usr/java/jdk1.6.0_31
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CATALINA_HOME=/usr/share/apache-tomcat-7.0.26


case $1 in
start)
sh $CATALINA_HOME/bin/startup.sh
;; 
stop)   
sh $CATALINA_HOME/bin/shutdown.sh
;; 
restart)
sh $CATALINA_HOME/bin/shutdown.sh
sh $CATALINA_HOME/bin/startup.sh
;; 
esac    
exit 0

这作为 root 用户运行良好。

新剧本就是这样

    #!/bin/bash
# description: Tomcat Start Stop Restart
# processname: tomcat
# chkconfig: 234 20 80
JAVA_HOME=/usr/java/jdk1.6.0_31
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CATALINA_HOME=/usr/share/apache-tomcat-7.0.26/bin


case $1 in
start)
/bin/su tomcat $CATALINA_HOME/startup.sh
;; 
stop)   
/bin/su tomcat $CATALINA_HOME/shutdown.sh
;; 
restart)
/bin/su tomcat $CATALINA_HOME/shutdown.sh
/bin/su tomcat $CATALINA_HOME/startup.sh
;; 
esac    
exit 0

但这在启动我的服务时会出错, 无法找到问题所在

4

3 回答 3

4

我知道这是一个老问题,但这个答案可能会让某人受益。

我对“没有这样的文件或目录”有同样的问题。我将服务命令作为 shell 脚本运行 $> /etc/init.d/tomcat stop ,它返回: -bash: /etc/init.d/tomcat: /bin/bash^M: bad interpreter: No such file or directory

因为我在 Windows 环境中创建了脚本,所以它有 Windows 行结尾。一旦我解决了这个问题,Tomcat 就可以毫无问题地作为服务启动。

本文可能有助于换行如何在 Bash 脚本中将 DOS/Windows 换行符 (CRLF) 转换为 Unix 换行符 (\n)?

于 2015-07-02T13:11:56.627 回答
2

su-c如果要使用它启动命令,则需要 a :

/bin/su tomcat -c whatever_command
于 2012-04-11T12:36:23.343 回答
1

这很可能是由于将$CATALINA_HOME变量更改为/bin.

startup.sh 调用catalina.sh取决于$CATALINA_HOME特定目录的脚本。我绝对建议将其更改回CATALINA_HOME=/usr/share/apache-tomcat-7.0.26然后重新添加/bin到命令调用中。Tomcat 严重依赖CATALINA_HOME环境变量。

希望有帮助。

编辑:您仍然需要考虑 Mat 的回答,这应该只是修复您现在遇到的文件未找到错误。

于 2012-04-11T14:35:12.843 回答