Câu hỏi Tomcat7 bắt đầu lúc khởi động máy chủ


My ubuntu 13.10 đã được cấu hình để khởi động apache2 và tomcat7 lúc khởi động, nhưng (có thể cho các bản cập nhật hệ thống tự động) chúng không tự động khởi động khi khởi động nữa.

Tôi đã giải quyết apache2 tự động bắt đầu với các lệnh sau:

update-rc.d -f apache2 remove
update-rc.d apache2 add
update-rc.d apache2 enable

Nhưng những cái tương tự cho tomcat7 không hoạt động! Tôi đã tìm kiếm các nhật ký tìm lỗi nhưng không tìm thấy gì.

NHỮNG CÔNG VIỆC NÀY:

service tomcat7 start

tập tin chuẩn /etc/init.d/tomcat7 của tôi:

    #!/bin/sh
    #
    # /etc/init.d/tomcat7 -- startup script for the Tomcat 6 servlet engine
    #
    # Written by Miquel van Smoorenburg <miquels@cistron.nl>.
    # Modified for Debian GNU/Linux by Ian Murdock <imurdock@gnu.ai.mit.edu>.
    # Modified for Tomcat by Stefan Gybas <sgybas@debian.org>.
    # Modified for Tomcat6 by Thierry Carrez <thierry.carrez@ubuntu.com>.
    # Modified for Tomcat7 by Ernesto Hernandez-Novich <emhn@itverx.com.ve>.
    # Additional improvements by Jason Brittain <jason.brittain@mulesoft.com>.
    #
    ### BEGIN INIT INFO
    # Provides:          tomcat7
    # Required-Start:    $local_fs $remote_fs $network
    # Required-Stop:     $local_fs $remote_fs $network
    # Should-Start:      $named
    # Should-Stop:       $named
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Start Tomcat.
    # Description:       Start the Tomcat servlet engine.
    ### END INIT INFO

    set -e


echo "============================================================================" >> /var/log/tomcat7/catalina.out
echo "$(date) /etc/init.d/tomcat -> starting/stoping/restarting" >> /var/log/tomcat7/catalina.out
echo "============================================================================" >> /var/log/tomcat7/catalina.out


    PATH=/bin:/usr/bin:/sbin:/usr/sbin
    NAME=tomcat7
    DESC="Tomcat servlet engine"
    DEFAULT=/etc/default/$NAME
    JVM_TMP=/tmp/tomcat7-$NAME-tmp

    if [ `id -u` -ne 0 ]; then
            echo "You need root privileges to run this script"
            exit 1
    fi

    # Make sure tomcat is started with system locale
    if [ -r /etc/default/locale ]; then
            . /etc/default/locale
            export LANG
    fi

    . /lib/lsb/init-functions

    if [ -r /etc/default/rcS ]; then
            . /etc/default/rcS
    fi


    # The following variables can be overwritten in $DEFAULT

    # Run Tomcat 7 as this user ID and group ID
    TOMCAT7_USER=tomcat7
    TOMCAT7_GROUP=tomcat7
    # this is a work-around until there is a suitable runtime replacement
    # for dpkg-architecture for arch:all packages
    # this function sets the variable OPENJDKS
    find_openjdks()
    {
            for jvmdir in /usr/lib/jvm/java-7-openjdk-*
            do
                    if [ -d "${jvmdir}" -a "${jvmdir}" != "/usr/lib/jvm/java-7-openjdk-common" ]
                    then
                            OPENJDKS=$jvmdir
                    fi
            done
            for jvmdir in /usr/lib/jvm/java-6-openjdk-*
            do
                    if [ -d "${jvmdir}" -a "${jvmdir}" != "/usr/lib/jvm/java-6-openjdk-common" ]
                    then
                            OPENJDKS="${OPENJDKS} ${jvmdir}"
                    fi
            done
    }

    OPENJDKS=""
    find_openjdks
    # The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
    # defined in $DEFAULT)
    JDK_DIRS="/usr/lib/jvm/default-java ${OPENJDKS} /usr/lib/jvm/java-6-openjdk /usr/lib/jvm/java-6-sun /usr/lib/jvm/java-7-oracle"

    # Look for the right JVM to use
    for jdir in $JDK_DIRS; do
        if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
            JAVA_HOME="$jdir"
        fi
    done
    export JAVA_HOME

    # Directory where the Tomcat 6 binary distribution resides
    CATALINA_HOME=/usr/share/$NAME

    # Directory for per-instance configuration files and webapps
    CATALINA_BASE=/var/lib/$NAME
    # Use the Java security manager? (yes/no)
    TOMCAT7_SECURITY=no

    # Default Java options
    # Set java.awt.headless=true if JAVA_OPTS is not set so the
    # Xalan XSL transformer can work without X11 display on JDK 1.4+
    # It also looks like the default heap size of 64M is not enough for most cases
    # so the maximum heap size is set to 128M
    if [ -z "$JAVA_OPTS" ]; then
            JAVA_OPTS="-Djava.awt.headless=true -Xmx128M"
    fi

    # End of variables that can be overwritten in $DEFAULT
    # overwrite settings from default file
    if [ -f "$DEFAULT" ]; then
            . "$DEFAULT"
    fi

    if [ ! -f "$CATALINA_HOME/bin/bootstrap.jar" ]; then
            log_failure_msg "$NAME is not installed"
            exit 1
    fi

    POLICY_CACHE="$CATALINA_BASE/work/catalina.policy"

    if [ -z "$CATALINA_TMPDIR" ]; then
            CATALINA_TMPDIR="$JVM_TMP"
    fi

    # Set the JSP compiler if set in the tomcat7.default file
    if [ -n "$JSP_COMPILER" ]; then
            JAVA_OPTS="$JAVA_OPTS -Dbuild.compiler=\"$JSP_COMPILER\""
    fi

    SECURITY=""
    if [ "$TOMCAT7_SECURITY" = "yes" ]; then
            SECURITY="-security"
    fi

    # Define other required variables
    CATALINA_PID="/var/run/$NAME.pid"
    CATALINA_SH="$CATALINA_HOME/bin/catalina.sh"

    # Look for Java Secure Sockets Extension (JSSE) JARs
    if [ -z "${JSSE_HOME}" -a -r "${JAVA_HOME}/jre/lib/jsse.jar" ]; then
        JSSE_HOME="${JAVA_HOME}/jre/"
    fi
    catalina_sh() {
            # Escape any double quotes in the value of JAVA_OPTS
            JAVA_OPTS="$(echo $JAVA_OPTS | sed 's/\"/\\\"/g')"

            AUTHBIND_COMMAND=""
            if [ "$AUTHBIND" = "yes" -a "$1" = "start" ]; then
                    JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
                    AUTHBIND_COMMAND="/usr/bin/authbind --deep /bin/bash -c "
            fi

            # Define the command to run Tomcat's catalina.sh as a daemon
            # set -a tells sh to export assigned variables to spawned shells.
            TOMCAT_SH="set -a; JAVA_HOME=\"$JAVA_HOME\"; source \"$DEFAULT\"; \
                    CATALINA_HOME=\"$CATALINA_HOME\"; \
                    CATALINA_BASE=\"$CATALINA_BASE\"; \
                    JAVA_OPTS=\"$JAVA_OPTS\"; \
                    CATALINA_PID=\"$CATALINA_PID\"; \
                    CATALINA_TMPDIR=\"$CATALINA_TMPDIR\"; \
                    LANG=\"$LANG\"; JSSE_HOME=\"$JSSE_HOME\"; \
                    cd \"$CATALINA_BASE\"; \
                    \"$CATALINA_SH\" $@"

            if [ "$AUTHBIND" = "yes" -a "$1" = "start" ]; then
                    TOMCAT_SH="'$TOMCAT_SH'"
            fi

            # Run the catalina.sh script as a daemon
            set +e
            touch "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
            chown $TOMCAT7_USER "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
            start-stop-daemon --start -b -u "$TOMCAT7_USER" -g "$TOMCAT7_GROUP" \
                    -c "$TOMCAT7_USER" -d "$CATALINA_TMPDIR" -p "$CATALINA_PID" \
                    -x /bin/bash -- -c "$AUTHBIND_COMMAND $TOMCAT_SH"
            status="$?"
            set +a -e
            return $status
    }

    case "$1" in
      start)
            if [ -z "$JAVA_HOME" ]; then
                    log_failure_msg "no JDK or JRE found - please set JAVA_HOME"
                    exit 1
            fi

            if [ ! -d "$CATALINA_BASE/conf" ]; then
                    log_failure_msg "invalid CATALINA_BASE: $CATALINA_BASE"
                    exit 1
            fi

            log_daemon_msg "Starting $DESC" "$NAME"
            if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \
                    --user $TOMCAT7_USER --exec "$JAVA_HOME/bin/java" \
                    >/dev/null; then

                    # Regenerate POLICY_CACHE file
                    umask 022
                    echo "// AUTO-GENERATED FILE from /etc/tomcat7/policy.d/" \
                            > "$POLICY_CACHE"
                    echo ""  >> "$POLICY_CACHE"
                    cat $CATALINA_BASE/conf/policy.d/*.policy \
                            >> "$POLICY_CACHE"

                    # Remove / recreate JVM_TMP directory
                    rm -rf "$JVM_TMP"
                    mkdir -p "$JVM_TMP" || {
                            log_failure_msg "could not create JVM temporary directory"
                            exit 1
                    }
                    chown $TOMCAT7_USER "$JVM_TMP"

                    catalina_sh start $SECURITY
                    sleep 5
                    if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \
                            --user $TOMCAT7_USER --exec "$JAVA_HOME/bin/java" \
                            >/dev/null; then
                            if [ -f "$CATALINA_PID" ]; then
                                    rm -f "$CATALINA_PID"
                            fi
                            log_end_msg 1
                    else
                            log_end_msg 0
                    fi
            else
                    log_progress_msg "(already running)"
                    log_end_msg 0
            fi
            ;;
      stop)
            log_daemon_msg "Stopping $DESC" "$NAME"

            set +e
            if [ -f "$CATALINA_PID" ]; then
                    start-stop-daemon --stop --pidfile "$CATALINA_PID" \
                            --user "$TOMCAT7_USER" \
                            --retry=TERM/20/KILL/5 >/dev/null
                    if [ $? -eq 1 ]; then
                            log_progress_msg "$DESC is not running but pid file exists, cleaning up"
                    elif [ $? -eq 3 ]; then
                            PID="`cat $CATALINA_PID`"
                            log_failure_msg "Failed to stop $NAME (pid $PID)"
                            exit 1
                    fi
                    rm -f "$CATALINA_PID"
                    rm -rf "$JVM_TMP"
            else
                    log_progress_msg "(not running)"
            fi
            log_end_msg 0
            set -e
            ;;
       status)
            set +e
            start-stop-daemon --test --start --pidfile "$CATALINA_PID" \
                    --user $TOMCAT7_USER --exec "$JAVA_HOME/bin/java" \
                    >/dev/null 2>&1
            if [ "$?" = "0" ]; then

                    if [ -f "$CATALINA_PID" ]; then
                        log_success_msg "$DESC is not running, but pid file exists."
                            exit 1
                    else
                        log_success_msg "$DESC is not running."
                            exit 3
                    fi
            else
                            log_progress_msg "$DESC is not running but pid file exists, cleaning up"
                    elif [ $? -eq 3 ]; then
                            PID="`cat $CATALINA_PID`"
                            log_failure_msg "Failed to stop $NAME (pid $PID)"
                            exit 1
                    fi
                    rm -f "$CATALINA_PID"
                    rm -rf "$JVM_TMP"
            else
                    log_progress_msg "(not running)"
            fi
            log_end_msg 0
            set -e
            ;;
       status)
            set +e
            start-stop-daemon --test --start --pidfile "$CATALINA_PID" \
                    --user $TOMCAT7_USER --exec "$JAVA_HOME/bin/java" \
                    >/dev/null 2>&1
            if [ "$?" = "0" ]; then

                    if [ -f "$CATALINA_PID" ]; then
                        log_success_msg "$DESC is not running, but pid file exists."
                            exit 1
                    else
                        log_success_msg "$DESC is not running."
                            exit 3
                    fi
            else
                    log_success_msg "$DESC is running with pid `cat $CATALINA_PID`"
            fi
            set -e
            ;;
      restart|force-reload)
            if [ -f "$CATALINA_PID" ]; then
                    $0 stop
                    sleep 1
            fi
            $0 start
            ;;
      try-restart)
            if start-stop-daemon --test --start --pidfile "$CATALINA_PID" \
                    --user $TOMCAT7_USER --exec "$JAVA_HOME/bin/java" \
                    >/dev/null; then
                    $0 start
            fi
            ;;
      *)
            log_success_msg "Usage: $0 {start|stop|restart|try-restart|force-reload|status}"
            exit 1
            ;;
    esac

    exit 0

Bất kỳ trợ giúp sẽ được đánh giá cao, Cảm ơn


2
2017-07-05 07:30


gốc


kiểm tra điều này askubuntu.com/questions/223944/… - hwez
/etc/init.d/tomcat7 của tôi phức tạp hơn url trong url này, dù sao tôi cũng đã làm theo các bước được mô tả và vẫn không hoạt động. Và nếu tôi cố gắng để bắt đầu nó bằng tay với các kịch bản được xác định trong 223944 tomcat của tôi không hoạt động đúng - surfealokesea
bạn có thể phục hồi nó không? - hwez
Nó sẽ là một lựa chọn nhưng tôi muốn sửa nó trước nếu có thể - surfealokesea


Các câu trả lời:


đảm bảo rằng cả tomcat & apache đều không trực tuyến

Trước tiên, bạn phải tạo liên kết từ /etc/rc5.d:

cd /etc/rc5.d
sudo ln -s ../init.d/tomcat S71tomcat
sudo ln -s ../init.d/apache S72apache

cho tomcat tạo một tập tin và đặt tên là tomcat trong thư mục này /etc/init.d/

sudo touch /etc/init.d/tomcat
gksu 'gedit /etc/init.d/tomcat'

quá khứ

----------------------------  /etc/init.d/tomcat  ------------------------
#!/bin/bash
#
# tomcat        
#
# chkconfig: 
# description:  Start up the Tomcat servlet engine.

# Source function library.
. /etc/init.d/functions


RETVAL=$?
CATALINA_HOME="/usr/apps/apache/tomcat/jakarta-tomcat-4.0.4"

case "$1" in
 start)
        if [ -f $CATALINA_HOME/bin/startup.sh ];
          then
        echo $"Starting Tomcat"
            /bin/su tomcat $CATALINA_HOME/bin/startup.sh
        fi
    ;;
 stop)
        if [ -f $CATALINA_HOME/bin/shutdown.sh ];
          then
        echo $"Stopping Tomcat"
            /bin/su tomcat $CATALINA_HOME/bin/shutdown.sh
        fi
    ;;
 *)
    echo $"Usage: $0 {start|stop}"
    exit 1
    ;;
esac

exit $RETVAL
-----------------------  end of /etc/init.d/tomcat  ----------------------

cho apache $ sudo touch /etc/init.d/apache $ gksu 'gedit /etc/init.d/apache'

sau đó qua này

----------------------------  /etc/init.d/apache  ------------------------
#!/bin/bash
#
# apache        
#
# chkconfig: 
# description:  Start up the Apache web server.

# Source function library.
. /etc/init.d/functions


RETVAL=$?
APACHE_HOME="/usr/apps/apache/apache"

case "$1" in
 start)
    if [ -f $APACHE_HOME/bin/apachectl ]; then
        echo $"Starting Apache"
        $APACHE_HOME/bin/apachectl start
    fi
    ;;
 stop)
    if [ -f $APACHE_HOME/bin/apachectl ]; then
        echo $"Stopping Apache"
        $APACHE_HOME/bin/apachectl stop
    fi
    ;;
 *)
    echo $"Usage: $0 {start|stop}"
    exit 1
    ;;
esac

exit $RETVAL
-----------------------  end of /etc/init.d/apache  ----------------------

sau đó khởi động lại

$ gksu shutdown -r

1
2017-07-05 08:15



cảm ơn 4 trả lời của bạn, dịch vụ của tôi được gọi là tomcat7, tôi đã allready một lrwxrwxrwx 1 root root 17 Jul 5 09:53 S20tomcat7 -> ../init.d/tomcat7* tại /etc/rc5.d, tại sao tôi nên thay đổi của tôi init.d / tomcat7 cho phiên bản của bạn khi phiên bản của tôi là stardard và tôi đã không thay đổi nó? - surfealokesea
init.d / tomcat script của bạn là không hợp lệ cho tomcat7 của tôi, tomcat7 có một phiên bản mà hoạt động tốt gọi điện thoại, ví dụ, dịch vụ tomcat dừng | bắt đầu | khởi động lại. - surfealokesea
bạn phải thay đổi CATALINA_HOME này = ví dụ của nó - hwez
vâng, tôi đã nhận thấy, và đã làm nó. Nhưng khi tôi chạy với kịch bản này tomcat của tôi không hoạt động tốt (được định cấu hình sai) không bắt đầu khi khởi động. Hãy xem tập tin chuẩn /etc/init.d/tomcat7 của tôi, đây là tiêu chuẩn mà ubuntu cài đặt (gist.github.com/baylisscg/942150). Tôi cũng đã nhận thấy các mục rc5.d, trong trường hợp của tôi, nơi S20apache2 & S20tomcat7 và tôi đã thay đổi để S21tomcat7 & S22apache, kết quả là như nhau lúc khởi động: apache bắt đầu, tomcat không bắt đầu - surfealokesea
Thử cài đặt lại - hwez


Tôi đã tìm thấy sự cố:

Một init.d script khác đang chặn trong vài phút thực thi init.d / tomcat7.

Trong trường hợp của tôi, tôi có thể thấy trong bảng điều khiển của tôi lỗi này được lặp lại nhiều lần khi khởi động:

2014 Jul  6 11:42:39 vps56629 NOQUEUE: SYSERR(root): opendaemonsocket: daemon MTA-v4: cannot bind: Address already in use
2014 Jul  6 11:42:39 vps56629 daemon MTA-v4: problem creating SMTP socket
2

Khi lỗi xuất hiện trong giao diện điều khiển init.d / tomcat7 script bắt đầu thực hiện.

Tôi đã vô hiệu hóa sendmail, nhưng nó không phải là prolem thực sự.

Kịch bản chặn là quy tắc iptables chạy quá chậm vì các hoạt động tra cứu máy chủ, ** Tôi vừa xóa dòng sau trong /etc/init.d/iptables và bây giờ là ok: **

/sbin/iptables -L

1
2017-07-06 09:50