簡體   English   中英

在Centos上啟動時啟動Java應用程序

[英]Launch Java application at startup on Centos

我需要在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中文件的名稱如何與/etc/init.d目錄中的名稱符號鏈接。 注意/etc/rc3.d的文件是如何以Sxx或Kxx開頭的where xx是介於0099之間的數字。

我要告訴你的是正式的錯誤。 這些啟動腳本今天比我描述的更復雜,但它是正在發生的事情的基本輪廓。

在標准的Unix和Linux中,啟動腳本通常存儲在/etc/init.d ,然后鏈接到/etc/rcX.d目錄,其中X代表所謂的服務器的Init狀態 (是的,我正在鏈接到SCO Unix頁面,但它們都非常相似)。

請注意,Init State 3以多用戶模式運行,並且所有后台進程都已啟動。 這就是我告訴你查看/etc/rc3.d

當服務器進入該初始狀態時 ,它按字母順序運行以S開頭的所有腳本。 它運行每個腳本后面的參數start 因此, S01xxxxS03xxx之前啟動, S01xxxxS03xxx之前S99xxxxx

當服務器退出該初始狀態時 ,它按字母順序運行以K開頭的所有腳本,並將stop參數傳遞給它們。

現在,Centos,Redhat和Fedora設置為您處理了很多這樣的事情。 您可以指定依賴的服務,並指出啟動和關閉順序。 但是,沒有任何東西阻止您修改啟動腳本並創建自己的鏈接。

順便說一下,談論啟動和關閉的Java程序...... Jenkins是一個Java程序,它以與程序非常相似的方式啟動。 這是我從Jenkins網站下載的/etc/init.d腳本:

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

它會給你一些工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM