linux下将普通java程序做为linux服务

evangelionxb 2011-08-01 02:57:02
我的实验环境
RHEL 5.4
jdk 1.6
javac -version 正常
javac Hello.class 正常
环境统统正常

我想要做的是将一个普通的java程序做成一个linux service
Hello.java
Hello.class 一个

于是在
/etc/rc.d/init.d 下创建一个 shell
名为 myJava
内容如下



#!/bin/bash
#chkconfig: 5 80 90
#description:myJava
#

# source function library
. /etc/rc.d/init.d/functions

start()
{
echo -n $"Starting $prog: "
echo "Hello Linux Service"
java -version
# echo "CLASSPATH: ${CLASSPATH}"
# echo "PATH: ${PATH}"
# java -classpath $CLASSES MyFrame
# /usr/work/space1/bin/MyFrame start
}

stop()
{
echo -n $"Stopping $prog: "
javac -version
}

restart()
{
echo -n $"Reloading $prog: "
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
RETVAL=1
esac
exit $RETVAL



然后 chkconfig --add myJava 成功
运行 service myJava start 报异常
/etc/init.d/myJava: line 13: java: command not found
按照异常,也就是 java 命令找不到。但是在后台终端可以 正常调用
也就是说 命令中的 java 没有加载在 /etc/profile 中的 jdk环境? (我的猜测)
看看有什么思路。
...全文
265 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
evangelionxb 2011-08-01
  • 打赏
  • 举报
回复
原因找到了

# . /etc/rc.d/init.d/functions

将此行注释掉

/etc/rc.d/init.d/functions
中 应该 export path 了一次,导致此后设置path 无效

结贴。楼上的朋友辛苦了。
freetstar 2011-08-01
  • 打赏
  • 举报
回复
JAVA_HOME=/usr/java/jdk1.6.0_26
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
evangelionxb 2011-08-01
  • 打赏
  • 举报
回复
直接在脚本里面
PATH 设置了之后,貌似还是不行


#!/bin/bash
#chkconfig: 345 80 90
#description:myJava
#

JAVA_HOME=/usr/java/jdk1.6.0_26
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
# CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# CLASSES=${CLASSPATH}:/usr/work/space1/bin

# export JAVA_HOME
# export PATH
# export CLASSPATH

# source function library
. /etc/rc.d/init.d/functions

start()
{
echo -n $"Starting $prog: "
echo "Hello Linux Service"
java -version
# echo "CLASSPATH: ${CLASSPATH}"
# echo "PATH: ${PATH}"
# java -classpath $CLASSES MyFrame
# /usr/work/space1/bin/MyFrame start
}

stop()
{
echo -n $"Stopping $prog: "
javac -version
}

restart()
{
echo -n $"Reloading $prog: "
}

case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
RETVAL=1
esac
exit $RETVAL



freetstar 2011-08-01
  • 打赏
  • 举报
回复
直接在脚本里田PATH是最正确和easy的方法了
evangelionxb 2011-08-01
  • 打赏
  • 举报
回复
查了些资料也就是说
/etc/profile 和 ~/.bash_profile 是在启动一个交互登陆shell的时候被调用。

而如果是将jdk配置放在
/etc/rc.d/rc.local 就应该不会出现这种情况了(理论上?)

但是这样做是否 符合标准?
freetstar 2011-08-01
  • 打赏
  • 举报
回复
最简单的方法,在你的init。d下的java脚本中手动添加PATH变量就ok了

19,619

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧