我需要更改由非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
但是在启动服务时会出错 无法找到问题
答案 0 :(得分:3)
我知道这是一个老问题,但这个答案可能会使某些人受益。
我对“没有这样的文件或目录”有同样的问题。我将服务命令作为shell脚本运行
$> /etc/init.d/tomcat stop
返回:
-bash: /etc/init.d/tomcat: /bin/bash^M: bad interpreter: No such file or directory
因为我在Windows环境中创建了脚本,所以它具有Windows行结尾。一旦我解决了这个问题,Tomcat就可以作为服务启动而没有问题。
本文可能有助于换行How to convert DOS/Windows newline (CRLF) to Unix newline (\n) in a Bash script?
答案 1 :(得分:2)
su
需要-c
:
/bin/su tomcat -c whatever_command
答案 2 :(得分:1)
这很可能是将$CATALINA_HOME
变量更改为/bin
的结果。
startup.sh
调用catalina.sh
脚本,该脚本取决于作为特定目录的$CATALINA_HOME
。我肯定建议将其更改回CATALINA_HOME=/usr/share/apache-tomcat-7.0.26
,然后将/bin
添加回命令调用。 Tomcat严重依赖于CATALINA_HOME
环境变量。
希望有所帮助。
编辑:你仍然需要考虑Mat的答案,这应该只是修复你现在得到的文件未找到错误。