Làm cách nào để tự động khởi động lại Tomcat7 khi khởi động lại hệ thống?


26

Tôi đã cài đặt Tomcat 7 trên Ubuntu 12.04 LTS chạy trên phiên bản Amzon EC2. Bây giờ tôi muốn tomcat nên tự động khởi động lại khi khởi động lại hệ thống.

Tôi đọc blog này đề nghị thêm đoạn script bên dưới vào /etc/init.d/tomcat7:

# Tomcat auto-start
#
# description: Auto-starts tomcat
# processname: tomcat
# pidfile: /var/run/tomcat.pid

case $1 in
start)
sh /usr/share/tomcat7/bin/startup.sh
;;
stop) 
sh /usr/share/tomcat7/bin/shutdown.sh
;;
restart)
sh /usr/share/tomcat7/bin/shutdown.sh
sh /usr/share/tomcat7/bin/startup.sh
;;
esac 
exit 0

và đưa ra các lệnh sau:

sudo chmod 755 /etc/init.d/tomcat7

sudo ln -s /etc/init.d/tomcat7 /etc/rc1.d/K99tomcat

sudo ln -s /etc/init.d/tomcat7 /etc/rc2.d/S99tomcat

sudo /etc/init.d/tomcat7 restart

Những câu hỏi của tôi

  1. Các tomcat7 đã có kịch bản trong đó, nơi nào chúng ta phải dán kịch bản đề nghị?
  2. Là thủ tục đề nghị chính xác?

Câu trả lời:


51

Tạo tập lệnh init trong /etc/init.d/tomcat7 với nội dung như bên dưới (tập lệnh của bạn cũng hoạt động nhưng tôi nghĩ rằng tập lệnh này tuân thủ chặt chẽ hơn các tiêu chuẩn).

Bằng cách này, Tomcat sẽ chỉ bắt đầu sau khi giao diện mạng đã được định cấu hình.

Nội dung kịch bản ban đầu:

#!/bin/bash

### BEGIN INIT INFO
# Provides:        tomcat7
# Required-Start:  $network
# Required-Stop:   $network
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: Start/Stop Tomcat server
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin

start() {
 sh /usr/share/tomcat7/bin/startup.sh
}

stop() {
 sh /usr/share/tomcat7/bin/shutdown.sh
}

case $1 in
  start|stop) $1;;
  restart) stop; start;;
  *) echo "Run as $0 <start|stop|restart>"; exit 1;;
esac

Thay đổi quyền của nó và tự động thêm các liên kết tượng trưng chính xác:

chmod 755 /etc/init.d/tomcat7
update-rc.d tomcat7 defaults

Và kể từ bây giờ, nó sẽ tự động được khởi động và tắt khi vào các đường băng thích hợp. Bạn cũng có thể kiểm soát nó vớiservice tomcat7 <stop|start|restart>


1
Cảm ơn. Tôi mới dùng Ubuntu. Ý nghĩa của bạn là gì khi bạn nói "bạn Tomcat sẽ chỉ bắt đầu sau khi giao diện mạng đã được cấu hình." Ý nghĩa của "giao diện mạng là gì?" Ý nghĩa của "khi vào cấp độ chạy phù hợp" là gì? và tập tin tomcat7 đã có rất nhiều tập lệnh trong đó tôi nên thêm tập lệnh do bạn đề xuất.
Gaurav Agarwal

Các tập lệnh init trong /etc/init.d có thể phụ thuộc lẫn nhau, chẳng hạn như trong trường hợp này: tập lệnh tomcat7 sẽ không được chạy trước khi tập lệnh mạng được chạy. Bạn có thể tra cứu các điều khoản 'runlevels' và 'giao diện mạng' trên google không? Tôi rất vui khi được giúp đỡ với những thứ khác nhưng không quá nhiều với những thứ tầm thường cho người khác. Và về câu hỏi khác: tập lệnh của tôi có nghĩa là thay thế /etc/init.d/tomcat7.
Marcin Kaminski

Các /etc/init.d/tomcat7trong hệ thống của tôi cũng tương tự như các tập tin ở đây gist.github.com/942150 . Tôi có nên xóa tất cả nội dung khỏi tệp và dán tập lệnh của bạn hoặc dán nó vào một nơi nào đó trong tập lệnh đã được viết.
Gaurav Agarwal

Tôi chưa thấy kịch bản bạn vừa tham khảo. Nó trông có vẻ lành mạnh và có vẻ như nó thay thế các kịch bản khởi động / tắt máy đi kèm với Tomcat. Phiên bản của tôi chỉ đơn thuần là sử dụng chúng. Bạn đã thử nghiệm các kịch bản và xác nhận chúng hoạt động? Nếu vậy, bạn có thể tiếp tục và sử dụng kịch bản của tôi. Sử dụng bất cứ thứ gì bạn thích, điều quan trọng là phải hiểu kịch bản làm gì khi bạn dán nó.
Marcin Kaminski

1
Tôi nghi ngờ kịch bản shell ở trên có thể gây ra lỗi như vậy. Vui lòng làm một số xử lý sự cố đầu tiên.
Marcin Kaminski

3
#!/bin/bash
#
# Author : subz
# Copyright (c) 2k15
#
# Make kill the tomcat process
#
TOMCAT_HOME=/media/subin/works/Applications/apache-tomcat-7.0.57
SHUTDOWN_WAIT=5

tomcat_pid() {
  echo `ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }'`
}

start() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ] 
  then
    echo "Tomcat is already running (pid: $pid)"
  else
    # Start tomcat
    echo "Starting tomcat"
    /bin/sh $TOMCAT_HOME/bin/startup.sh
  fi


  return 0
}

stop() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ]
  then
    echo "Stoping Tomcat"
    /bin/sh $TOMCAT_HOME/bin/shutdown.sh

    let kwait=$SHUTDOWN_WAIT
    count=0;
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
      echo -n -e "\nwaiting for processes to exit";
      sleep 1
      let count=$count+1;
    done

    if [ $count -gt $kwait ]; then
      echo -n -e "\nkilling processes which didn't stop after $SHUTDOWN_WAIT seconds"
      kill -9 $pid
      echo  " \nprocess killed manually"
    fi
  else
    echo "Tomcat is not running"
  fi

  return 0
}
pid=$(tomcat_pid)

 if [ -n "$pid" ]
  then
    echo "Tomcat is running with pid: $pid"
    stop
  else
    echo "Tomcat is not running"
    start
  fi
exit 0

ở trên shell script kiểm tra tomacat có chạy hay không nếu chạy nó giết quá trình. Nếu tomcat không chạy, nó sẽ bắt đầu lại thêm script này dưới dạng script khởi động
SUBZ

3

Không thể thêm cái này vào /etc/rc.local

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

sleep 10
/usr/share/tomcat7/bin/startup.sh

4
Ít nhất là người đã hạ bệ bạn, nên giải thích tại sao. Tất cả chúng ta đều không biết tất cả về Linux, và thật tuyệt khi tìm hiểu lý do tại sao bạn không nên làm điều này.
Edenshaw


0

apache tomcat không gửi bất kỳ tập lệnh init nào với nó.

  1. Cài đặt phiên bản đóng gói sẵn được Ubuntu duy trì từ trình quản lý gói Ubuntu phiên bản này gửi tập lệnh init của riêng nó.

  2. Thực hiện theo các bước trong blog mà bạn đã giới thiệu để cung cấp cho bạn một kịch bản khởi động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.