Jim*_*Jim 3 linux java opensuse tomcat
当我在其中创建一个启动脚本/etc/init.d
并执行export
一个变量时,这个变量是否持续存在并且对启动的进程“可见”?
具体来说,我有以下脚本在 init.d 中启动 tomcat,我手动启动start
:
#!/bin/bash
RETVAL=$?
export JRE_HOME=/home/jre
export PATH=/home/jre/bin/:${PATH}
export CATALINA_HOME=/home/apache-tomcat-7.0.25
case "$1" in
start)
if [ -f $CATALINA_HOME/bin/startup.sh ];
then
echo $"Starting Tomcat"
/bin/su root $CATALINA_HOME/bin/startup.sh
fi
;;
stop)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];
then
echo $"Stopping Tomcat"
/bin/su root $CATALINA_HOME/bin/shutdown.sh
fi
;;
restart)
if [ -f $CATALINA_HOME/bin/shutdown.sh ];
then
echo $"Stopping Tomcat"
/bin/su root $CATALINA_HOME/bin/shutdown.sh
fi
if [ -f $CATALINA_HOME/bin/startup.sh ];
then
echo $"Starting Tomcat"
/bin/su root $CATALINA_HOME/bin/startup.sh
fi
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
;;
esac
exit $RETVAL
Run Code Online (Sandbox Code Playgroud)
现在在 Tomcat 中我使用连接池,当我使用绝对 url 时,一切正常。IE:url="jdbc:h2:file:/home/apache-tomcat-7.0.25/webapps/myDB;SCHEMA=mySchema"
但是,如果我$CATALINA_HOME
在 url 中使用相对 url ie ,即url="jdbc:h2:file:$CATALINA_HOME\webapps\myDB;SCHEMA=mySchema"
这不起作用,我会收到 JNDI 异常。
请注意,在我的脚本中,我已导出$CATALINA_HOME
为/home/apache-tomcat-7.0.25
似乎$CATALINA_HOME
没有为 Tomcat 的启动实例设置。
可能是这种情况吗?任何人都知道为什么带有环境变量的 url 不起作用?
创建新进程时,环境从父进程复制。因此,您在启动另一个进程之前在脚本中设置的任何环境变量都应该存在。
su/sudo
作为一种安全措施,一些程序会根据它们的调用方式对环境进行一些过滤。所以你的 init 脚本正在调用su
which is starting $CATALINA_HOME/bin/startup.sh
,我猜它实际上是在做 Tomcast 启动。有些东西可能正在删除或忽略变量。
我确实想知道您为什么su root
从 init 脚本中调用 using 。默认情况下,初始化脚本以 root 身份运行,您应该没有理由需要再次成为 root 用户。如果我是你,我会放弃似乎毫无价值的电话su
。
只为帮你排忧解难。作为 root,在 Linux 上,当您/proc
挂载后,您可以查看当前的环境。
例如,如果 tomcat 的进程 ID 为 1234,那么您需要查看/proc/1234/environ
. 任何设置的东西都应该在那里。
归档时间: |
|
查看次数: |
9799 次 |
最近记录: |