我需要在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”。
其他的东西,从其他对我不起作用的线索中提取出来的。
我的失水事故看起来像:
#!/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中的文件名如何与/etc/init.d目录中的文件名进行符号链接。注意/etc/rc3.d中的所有文件都是以Sxx或Kxxwherexx开头的,是0099之间的一个数字。
我要告诉你的一切都是错误的。这些创业脚本今天比我描述的要复杂得多,但它只是一个基本的概要。
在标准的Unix和Linux中,启动脚本通常存储在/etc/init.d中,然后链接到/etc/rcX.d目录,其中X代表服务器的Init States。(是的,我正在链接到SCO Unix页面,但它们都非常相似)。
请注意,Init State 3正在多用户模式下运行,并且所有守护进程都已启动。这就是为什么我告诉你要查看/etc/rc3.d
当服务器进入in it状态时,它将按字母顺序运行所有以S开头的脚本。它运行每个脚本,后面带有参数start。因此,S01xxxxS03xxx之前开始,而S99xxxxxK之前开始。
当服务器退出init状态时,它按字母顺序运行以stop开始的所有脚本,并将/etc/init.d参数传递给它们。
现在,Centos、Redhat和Fedora安装程序为您处理了很多这方面的问题。您指定所依赖的服务,它会计算出启动和关闭顺序。然而,没有什么能阻止你咀嚼启动脚本并创建自己的链接。
顺便说一下,说到Java程序的启动和关闭。。。Jenkins是一个Java程序,它的启动方式与您的程序非常相似。以下是我从詹金斯网站上得到的脚本:

#!/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

它会给你一些工作的机会。

10-05 23:05
查看更多