gpt4 book ai didi

bash - 在 Centos 上启动时启动 Java 应用程序

转载 作者:行者123 更新时间:2023-11-29 09:21:46 24 4
gpt4 key购买 nike

我需要在 Centos (5.9) 启动时启动 Java 应用程序。

我试图在启动时在 Centos 上启动一个简单的脚本(名为“lanzar.sh”):

#!/bin/sh
cd /home/someuser/Desktop/Dist
java -jar SomeApp.jar

我将行“/bin/sh/home/someuser/Desktop/Dist/lanzar.sh”附加到/etc/rc.d/rc.local。但是 java 应用程序没有启动。我有:

  • 授予/etc/rc.d/rc.local 文件 755 权限
  • 将“lanzar.sh”的内容写入/etc/rc.d/rc.local。用分号分隔,并在不同的行中。
  • 更改“lanzar.sh”的位置。
  • 其他内容,取自其他对我不起作用的线程。

我的 rc.loca 看起来像:

#!/bin/sh

#

# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don't

# want to do the full Sys V style init stuff.
#
#Some comment

#Some comment

#Some comment
touch /var/lock/subsys/local
/bin/sh /home/fernando/Desktop/Dist/lanzar.sh

注意:我知道以前有人问过类似的问题,但在测试了我通过谷歌搜索找到的许多答案后都没有成功,我不得不自己问这个问题。

最佳答案

我强烈建议您浏览 /etc/init.d服务器目录和 /etc/rc3.d目录。查看/etc/rc3.d中文件的名称符号链接(symbolic link)到 /etc/init.d 中的名称目录。注意 /etc/rc3.d 中的文件全部以Sxx开头或 Kxx where xx 是 00 之间的数字至 99 .

我要告诉你的正式都是错误的。这些启动脚本今天比我描述的要复杂得多,但它是正在发生的事情的基本轮廓。

在标准的 Unix 和 Linux 中,启动脚本通常存储在 /etc/init.d 中。然后链接到 /etc/rcX.d X所在的目录代表所谓的Init States服务器的。 (是的,我正在链接到一个 SCO Unix 页面,但它们都非常相似)。

请注意,Init State 3 正在多用户模式下运行,并且所有守护进程都已启动。这就是为什么我告诉你要查看 /etc/rc3.d .

当服务器进入初始状态时,它会运行所有以S 开头的脚本。按字母顺序排列。它使用参数 start 运行每个脚本在它之后。所以,S01xxxxS03xxx 之前开始在 S99xxxxx 之前开始.

当服务器退出初始状态时,它会运行所有以K 开头的脚本。按字母顺序,并通过 stop参数。

现在,Centos、Redhat 和 Fedora 设置会为您处理很多这样的事情。您指定所依赖的服务,它会确定启动和关闭顺序。但是,没有什么能阻止您修改启动脚本并创建自己的链接。

顺便说一下启动和关闭的 Java 程序... Jenkins是一个 Java 程序,它的启动方式与您的程序非常相似。这是 /etc/init.d我从 Jenkins 网站上获取的脚本:

#!/bin/bash
#
# Startup script for Jenkins
#
# chkconfig: - 84 16
# description: Jenkins CI server

# Source function library.
. /etc/rc.d/init.d/functions
[ -z "$JAVA_HOME" -a -x /etc/profile.d/java.sh ] && . /etc/profile.d/java.sh

JENKINS_HOME=/var/jenkins
WAR="$JENKINS_HOME/jenkins.war"
LOG="/var/log/jenkins.log"
LOCK="/var/lock/subsys/jenkins"
export JENKINS_HOME

RETVAL=0

pid_of_jenkins() {
pgrep -f "java.*jenkins"
}

start() {
[ -e "$LOG" ] && cnt=`wc -l "$LOG" | awk '{ print $1 }'` || cnt=1

echo -n $"Starting jenkins: "

cd "$JENKINS_HOME"
nohup java -jar "$WAR" --httpPort=-1 --ajp13Port=8010 --prefix=/jenkins >> "$LOG" 2>&1 &

while { pid_of_jenkins > /dev/null ; } &&
! { tail +$cnt "$LOG" | grep -q 'Winstone Servlet Engine .* running' ; } ; do
sleep 1
done

pid_of_jenkins > /dev/null
RETVAL=$?
[ $RETVAL = 0 ] && success $"$STRING" || failure $"$STRING"
echo

[ $RETVAL = 0 ] && touch "$LOCK"
}

stop() {
echo -n "Stopping jenkins: "

pid=`pid_of_jenkins`
[ -n "$pid" ] && kill $pid
RETVAL=$?
cnt=10
while [ $RETVAL = 0 -a $cnt -gt 0 ] &&
{ pid_of_jenkins > /dev/null ; } ; do
sleep 1
((cnt--))
done

[ $RETVAL = 0 ] && rm -f "$LOCK"
[ $RETVAL = 0 ] && success $"$STRING" || failure $"$STRING"
echo
}

status() {
pid=`pid_of_jenkins`
if [ -n "$pid" ]; then
echo "jenkins (pid $pid) is running..."
return 0
fi
if [ -f "$LOCK" ]; then
echo $"${base} dead but subsys locked"
return 2
fi
echo "jenkins is stopped"
return 3
}

# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac

exit $RETVAL

它会为您提供一些有用的东西。

关于bash - 在 Centos 上启动时启动 Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22925608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com