วิธีการรีสตาร์ท Tomcat7 โดยอัตโนมัติเมื่อรีบูตระบบ?


26

ฉันติดตั้ง Tomcat 7 บน Ubuntu 12.04 LTS ซึ่งทำงานบนอินสแตนซ์ Amzon EC2 ตอนนี้ฉันหวังว่า Tomcat ควรรีสตาร์ทโดยอัตโนมัติเมื่อระบบรีบูท

ฉันอ่านบล็อกนี้ซึ่งแนะนำให้เพิ่มสคริปต์ด้านล่างลงใน/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

และใช้คำสั่งต่อไปนี้:

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

คำถามของฉัน

  1. tomcat7แล้วมีสคริปต์ในนั้นที่เราต้องวางสคริปต์ปัญหา?
  2. ขั้นตอนที่แนะนำถูกต้องหรือไม่

คำตอบ:


51

สร้างสคริปต์เริ่มต้นใน /etc/init.d/tomcat7 พร้อมเนื้อหาตามด้านล่าง (สคริปต์ของคุณควรทำงานด้วย แต่ฉันคิดว่าอันนี้ปฏิบัติตามมาตรฐานอย่างใกล้ชิดมากขึ้น)

วิธีนี้ Tomcat จะเริ่มทำงานหลังจากตั้งค่าอินเตอร์เฟสเครือข่ายแล้ว

เนื้อหาสคริปต์เริ่มต้น:

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

เปลี่ยนการอนุญาตและเพิ่ม symlink ที่ถูกต้องโดยอัตโนมัติ:

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

และจากนี้ไปมันจะเริ่มต้นโดยอัตโนมัติและปิดเมื่อเข้าสู่ runlevels ที่เหมาะสม คุณยังสามารถควบคุมมันได้ด้วยservice tomcat7 <stop|start|restart>


1
ขอบคุณ ฉันใหม่สำหรับ Ubuntu ความหมายคืออะไรเมื่อคุณพูดว่า "คุณ Tomcat จะเริ่มทำงานหลังจากตั้งค่าอินเตอร์เฟสเครือข่ายแล้ว" ความหมายของ "เน็ตเวิร์กอินเตอร์เฟส" คืออะไร? ความหมายของ "เมื่อเข้าสู่ระดับการทำงานที่เหมาะสม" คืออะไร? และไฟล์ tomcat7 นั้นมีสคริปต์อยู่มากมายซึ่งฉันควรจะเพิ่มสคริปต์ที่คุณแนะนำ
Gaurav Agarwal

สคริปต์ init ภายใต้ /etc/init.d สามารถพึ่งพาซึ่งกันและกันเช่นในกรณีนี้: สคริปต์ tomcat7 จะไม่ทำงานก่อนที่สคริปต์เครือข่ายจะทำงาน คุณสามารถค้นหาคำว่า 'runlevels' และ 'network interface' บน google ได้หรือไม่? ฉันยินดีที่จะช่วยเหลือในเรื่องอื่น แต่ไม่มากนักสำหรับเรื่องเล็ก ๆ น้อย ๆ ของ Googling สำหรับผู้อื่น และเกี่ยวกับคำถามอื่น ๆ : สคริปต์ของฉันมีไว้เพื่อแทนที่ /etc/init.d/tomcat7
Marcin Kaminski

/etc/init.d/tomcat7ในระบบของฉันคล้ายกับไฟล์ที่นี่gist.github.com/942150 ฉันควรลบเนื้อหาทั้งหมดออกจากไฟล์และวางสคริปต์ของคุณหรือวางในบางที่ในสคริปต์ที่เขียนแล้ว
Gaurav Agarwal

ฉันไม่เห็นสคริปต์ที่คุณเพิ่งอ้างอิง ดูเหมือนว่ามีเหตุผลและดูเหมือนว่ามันจะแทนที่สคริปต์เริ่มต้น / ปิดที่มาพร้อมกับ Tomcat เวอร์ชันของฉันกำลังใช้งานอยู่ คุณได้ทดสอบสคริปต์เหล่านั้นและยืนยันว่าทำงานได้หรือไม่ ถ้าเป็นเช่นนั้นคุณสามารถไปข้างหน้าและใช้สคริปต์ของฉัน ใช้สิ่งที่คุณต้องการสิ่งสำคัญคือการเข้าใจว่าสคริปต์ทำอะไรเมื่อคุณวางสคริปต์
Marcin Kaminski

1
ฉันสงสัยว่าเชลล์สคริปต์ด้านบนอาจทำให้เกิดข้อผิดพลาดดังกล่าวได้ โปรดทำการแก้ไขปัญหาก่อน
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

การตรวจสอบเชลล์สคริปต์ข้างต้นสำหรับ tomacat กำลังรันอยู่หรือไม่ถ้าการรันหยุดทำงานกระบวนการหาก tomcat ไม่ทำงานมันจะเริ่มต้นอีกครั้งเพิ่มสคริปต์นี้เป็นสคริปต์เริ่มต้น
SUBZ

3

ไม่สามารถเพิ่มสิ่งนี้ใน /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
อย่างน้อยคนที่ลงคะแนนคุณควรอธิบายว่าทำไม เราทุกคนไม่รู้เกี่ยวกับลีนุกซ์และมันคงจะดีถ้าเรียนรู้ว่าทำไมคุณไม่ควรทำเช่นนี้
Edenshaw


0

apache tomcat ไม่ได้จัดส่งสคริปต์เริ่มต้นใด ๆ

  1. ติดตั้งรุ่นที่ได้รับการบรรจุล่วงหน้าซึ่งดูแลโดย Ubuntu จากตัวจัดการแพ็คเกจของ Ubuntu รุ่นนี้จะจัดส่งสคริปต์เริ่มต้นของตนเอง

  2. ทำตามขั้นตอนในบล็อกที่คุณอ้างถึงซึ่งให้สคริปต์การเริ่มต้นที่ง่าย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.