tomcat - ตัวแปร CATALINA_BASE และ CATALINA_HOME


102

ฉันมี tomcat 6 หลายอินสแตนซ์ที่ทำงานบนเซิร์ฟเวอร์เดียวกัน (Linux) และทำงานได้ตามที่คาดไว้ ฉันพยายามค้นหาว่าแนวปฏิบัติมาตรฐานเกี่ยวกับการตั้งค่าCATALINA_HOMEและCATALINA_BASEตัวแปรเป็นอย่างไร

ในการติดตั้ง Tomcat ของฉันฉันมีการติดตั้งCATALINA_HOMEไปยังจุดที่จะเป็น "ทั่วไป" โฟลเดอร์ (พูด/tomcat6) และCATALINA_BASEตัวแปรแตกต่างกันไปขึ้นอยู่กับชื่ออินสแตนซ์ (พูด/tomcat_instance1, /tomcat_instance2)

คำถามของฉันคือ:

  • ฉันต้องการตัวแปรสองตัวหรือไม่?
  • หรือฉันสามารถมีหนึ่งCATALINA_HOMEและทำไปด้วย CATALINA_BASE(หรือในทางกลับกัน)?

3
คำถามคือคำตอบจริงๆ
Koray Tugay

4
เหตุผลที่คุณต้องทำคือแยกการบำรุงรักษาซอฟต์แวร์ Tomcat (ซึ่งมีอยู่$CATALINA_HOME) ออกจากการบำรุงรักษาคอนฟิกูเรชันและเนื้อหาอินสแตนซ์ Tomcat (ซึ่งอยู่ใน$CATALINA_BASE)
Reinierpost

คำตอบ:


110

หากคุณกำลังเรียกใช้ Tomcat หลายอินสแตนซ์บนโฮสต์เดียวคุณควรตั้งค่าCATALINA_BASEให้เท่ากับไดเร็กทอรี.../tomcat_instance1หรือ.../tomcat_instance2ตามความเหมาะสมสำหรับแต่ละอินสแตนซ์และCATALINA_HOMEตัวแปรสภาพแวดล้อมสำหรับการติดตั้ง Tomcat ทั่วไปซึ่งไฟล์จะถูกแชร์ระหว่างสองอินสแตนซ์

CATALINA_BASEสภาพแวดล้อมที่เป็นตัวเลือกถ้าคุณใช้อินสแตนซ์ Tomcat เดียวบนโฮสต์และจะเริ่มต้นCATALINA_HOMEในกรณีที่ หากคุณกำลังเรียกใช้หลายอินสแตนซ์ตามที่คุณต้องการควรจัดเตรียมไว้

มีคำอธิบายที่ดีเกี่ยวกับการตั้งค่านี้ในRUNNING.txtไฟล์ในรูทของการแจกจ่าย Apache Tomcat ภายใต้หัวข้อการกำหนดค่าขั้นสูง - อินสแตนซ์ Tomcat หลายรายการ


1
ย่อหน้าที่สองของคุณไม่ถูกต้องเมื่อใช้ Tomcat แบบแพ็กเกจบน Ubuntu มันแยกซอฟต์แวร์ Tomcat (ใน $ CATALINA_HOME) ออกจากอินสแตนซ์ Tomcat อย่างถูกต้อง (ใน $ CATALINA_BASE)
reinierpost

89

CATALINA_HOME เทียบกับ CATALINA_BASE

CATALINA_HOMEหากคุณกำลังใช้หลายกรณีแล้วคุณต้องตัวแปรทั้งสองเป็นอย่างอื่นเท่านั้น

กล่าวอีกนัยหนึ่ง: CATALINA_HOMEจำเป็นและCATALINA_BASEเป็นทางเลือก

CATALINA_HOME แสดงถึงรูทของการติดตั้ง Tomcat ของคุณ

ทางเลือก Tomcat อาจถูกกำหนดค่าสำหรับหลายอินสแตนซ์โดยกำหนด$CATALINA_BASEสำหรับแต่ละอินสแตนซ์ หากไม่ได้กำหนดค่าหลายอินสแตนซ์จะ$CATALINA_BASEเหมือนกับ$CATALINA_HOMEไฟล์.

ดู: Apache Tomcat 7 - บทนำ

ทำงานโดยแยกCATALINA_HOMEและCATALINA_BASEจัดทำเป็นเอกสารใน RUNNING.txt ซึ่งระบุว่า:

CATALINA_HOMEและCATALINA_BASEสภาพแวดล้อมตัวแปรที่ใช้ในการระบุตำแหน่งของ Apache Tomcat และสถานที่ของการตั้งค่าใช้งานตามลำดับ

คุณไม่สามารถกำหนดค่าCATALINA_HOMEและCATALINA_BASEตัวแปรใน setenvสคริปต์ได้เนื่องจากใช้เพื่อค้นหาไฟล์นั้น

ตัวอย่างเช่น:

(4.1) Tomcat สามารถเริ่มต้นได้โดยดำเนินการคำสั่งใดคำสั่งหนึ่งต่อไปนี้:

  %CATALINA_HOME%\bin\startup.bat         (Windows)

  $CATALINA_HOME/bin/startup.sh           (Unix)

หรือ

  %CATALINA_HOME%\bin\catalina.bat start  (Windows)

  $CATALINA_HOME/bin/catalina.sh start    (Unix)

อินสแตนซ์ Tomcat หลายรายการ

ในหลาย ๆ กรณีเป็นที่พึงปรารถนาที่จะมีสำเนาเดียวของการแจกจ่ายไบนารี Tomcat ที่ใช้ร่วมกันระหว่างผู้ใช้หลายคนบนเซิร์ฟเวอร์เดียวกัน เพื่อให้เป็นไปได้คุณสามารถตั้งค่าCATALINA_BASE ตัวแปรสภาพแวดล้อมเป็นไดเร็กทอรีที่มีไฟล์สำหรับอินสแตนซ์ Tomcat 'ส่วนบุคคล' ของคุณ

เมื่อใช้กับแยกต่างหากCATALINA_HOMEและCATALINA_BASEไฟล์และไดเรกทอรีแยกดังต่อไปนี้:

ในCATALINA_BASE:

  • bin - เฉพาะ: setenv.sh (* nix) หรือ setenv.bat (Windows), tomcat-juli.jar
  • conf - ไฟล์การกำหนดค่าเซิร์ฟเวอร์ (รวมถึง server.xml)
  • lib - ห้องสมุดและชั้นเรียนตามที่อธิบายไว้ด้านล่าง
  • logs - ไฟล์บันทึกและเอาต์พุต
  • webapps - โหลดแอปพลิเคชันเว็บโดยอัตโนมัติ
  • work - ไดเรกทอรีการทำงานชั่วคราวสำหรับเว็บแอปพลิเคชัน
  • temp - ไดเรกทอรีที่ JVM ใช้สำหรับไฟล์ชั่วคราว>

ในCATALINA_HOME:

  • bin - สคริปต์เริ่มต้นและปิดระบบ
  • lib - ห้องสมุดและชั้นเรียนตามที่อธิบายไว้ด้านล่าง
  • endorsed- ไลบรารีที่ลบล้างมาตรฐาน "มาตรฐานที่รับรอง" โดยค่าเริ่มต้นจะไม่มี

วิธีตรวจสอบ

วิธีที่ง่ายที่สุดในการตรวจสอบสิ่งที่คุณCATALINA_BASEและCATALINA_HOMEเป็นโดยการทำงานstartup.shตัวอย่างเช่น:

$ /usr/share/tomcat7/bin/startup.sh
Using CATALINA_BASE:   /usr/share/tomcat7
Using CATALINA_HOME:   /usr/share/tomcat7

คุณสามารถตรวจสอบตำแหน่งที่ติดตั้งไฟล์ Tomcat ได้ด้วยdpkgเครื่องมือด้านล่าง (Debian / Ubuntu):

dpkg -L tomcat7-common

8
นี่เป็นคำตอบที่ดีกว่ามากจากการยอมรับ อธิบายได้ดีมาก
syncdk

โปรดอธิบายวิธีเริ่มต้นอินสแตนซ์ Tomcat หลายตัวด้วย CATALINA_BASE ที่แตกต่างกัน
มาร์ค

CATALINA_BASE และ CATALINA_HOME ต้องตั้งค่าเป็นตัวแปรของระบบ: Windows: set CATALINA_BASE = path
Mark

11

ฉันไม่สามารถพูดได้ว่าฉันรู้แนวทางปฏิบัติที่ดีที่สุด แต่นี่คือมุมมองของฉัน

จะให้คุณใช้ตัวแปรเหล่านี้เพื่ออะไร?

โดยส่วนตัวแล้วฉันไม่จำเป็นต้องเปลี่ยนทั้งบน Linux หรือ Windows ในสภาพแวดล้อมที่แตกต่างกันไปตั้งแต่การพัฒนาจนถึงการใช้งานจริง หากคุณไม่ได้ทำอะไรบางอย่างที่ต้องอาศัยมันเป็นพิเศษคุณอาจปล่อยให้พวกเขาอยู่คนเดียว

catalina.shตั้งค่าตัวแปรที่ Tomcat ต้องทำงานนอกกรอบ นอกจากนี้ยังบอกว่าCATALINA_BASEเป็นทางเลือก:

#   CATALINA_HOME   May point at your Catalina "build" directory.
#
#   CATALINA_BASE   (Optional) Base directory for resolving dynamic portions
#                   of a Catalina installation.  If not present, resolves to
#                   the same directory that CATALINA_HOME points to.

ฉันค่อนข้างแน่ใจว่าคุณจะทราบว่าการตั้งค่าของคุณทำงานได้หรือไม่เมื่อคุณเริ่มเซิร์ฟเวอร์


คุณสามารถกำหนดcatalina_homeเส้นทางใน\bin\catalina.shไฟล์สำหรับทั้งสองอินสแตนซ์ของ tomcat ได้หรือไม่?
Giri

8

การชี้CATALINA_BASEไปที่ไดเร็กทอรีอื่นจากCATALINA_HOMEช่วยให้คุณสามารถแยกไดเร็กทอรีคอนฟิกูเรชันออกจากไดเร็กทอรีไบนารี

ตามค่าเริ่มต้นCATALINA_BASE(การกำหนดค่า) และCATALINA_HOME(ไบนารี) จะชี้ไปที่โฟลเดอร์เดียวกัน แต่การแยกการกำหนดค่าออกจากไบนารีจะช่วยให้คุณเรียกใช้ Tomcat หลายอินสแตนซ์ควบคู่กันได้โดยไม่ต้องทำสำเนาไบนารีซ้ำ

นอกจากนี้ยังมีประโยชน์เมื่อคุณต้องการอัปเดตไบนารีโดยไม่ต้องแก้ไขหรือจำเป็นต้องสำรอง / กู้คืนไฟล์การกำหนดค่าสำหรับ Tomcat

อัปเดต 2018

มีวิธีที่ง่ายกว่าในการตั้งค่า CATALINA_BASE ในขณะนี้ด้วยmakebaseยูทิลิตี้ ฉันได้โพสต์บทช่วยสอนที่ครอบคลุมเรื่องนี้ที่http://blog.rasia.io/blog/how-to-easily-setup-lucee-in-tomcat.htmlพร้อมกับวิดีโอสอนที่ https://youtu.be / nuugoG5c-7M

คำตอบเดิมอยู่ด้านล่าง

หากต้องการใช้ประโยชน์จากคุณลักษณะนี้เพียงสร้างไดเร็กทอรี config และชี้ไปที่มันด้วยCATALINA_BASEตัวแปรสภาพแวดล้อม คุณจะต้องใส่ไฟล์บางไฟล์ในไดเร็กทอรีนั้น:

  • คัดลอกconfไดเร็กทอรีจากไดเร็กทอรีการติดตั้ง Tomcat ดั้งเดิมรวมถึงเนื้อหาและตรวจสอบให้แน่ใจว่า Tomcat มีสิทธิ์ในการอ่าน แก้ไขไฟล์การกำหนดค่าตามความต้องการของคุณ
  • สร้างlogsไดเร็กทอรีหากconf/logging.propertiesชี้ไปที่${catalina.base}/logsและตรวจสอบให้แน่ใจว่า Tomcat มีสิทธิ์ในการอ่าน / เขียน
  • สร้างtempไดเร็กทอรีหากคุณไม่ได้ลบล้างค่าดีฟอลต์$CATALINA_TMPDIRที่ชี้ไป${CATALINA_BASE}/tempและตรวจสอบให้แน่ใจว่า Tomcat มีสิทธิ์ในการเขียน
  • สร้างworkไดเร็กทอรีที่มีค่าเริ่มต้น${CATALINA_BASE}/workและตรวจสอบให้แน่ใจว่า Tomcat มีสิทธิ์ในการเขียน

2

CATALINA_BASE เป็นทางเลือก

อย่างไรก็ตามในสถานการณ์ต่อไปนี้จะช่วยในการตั้งค่า CATALINA_BASE ที่แยกจาก CATALINA_HOME

  1. เมื่อมีการเรียกใช้ Tomcat มากกว่า 1 อินสแตนซ์บนโฮสต์เดียวกัน

    • สิ่งนี้ช่วยให้มีรันไทม์เพียง 1 รันไทม์ของการติดตั้ง tomcat โดยมีการกำหนดค่าเซิร์ฟเวอร์ CATALINA_BASE หลายตัวที่รันบนพอร์ตแยกกัน
    • หากจำเป็นต้องมีการแก้ไขหรืออัปเกรดเวอร์ชันจำเป็นต้องมีการเปลี่ยนแปลงการติดตั้งเพียง 1 รายการหรือต้องทดสอบ / ตรวจสอบ / ลงชื่อออก
  2. การแยกความกังวล (ความรับผิดชอบเดียว)

    • รันไทม์ Tomcat เป็นมาตรฐานและไม่มีการเปลี่ยนแปลงในทุกขั้นตอนการเผยแพร่ เช่นไบนารี Tomcat
    • กระบวนการเผยแพร่อาจเพิ่มสิ่งอื่น ๆ เช่น webapplication (โฟลเดอร์ webapps) การกำหนดค่าสภาพแวดล้อม (ไดเรกทอรี conf) บันทึก / temp / work directory

-5

นั่นคือโฟลเดอร์หลักของ bin ซึ่งมีไฟล์ tomcat.exe:

CATALINA_HOME='C:\Program Files\Apache Software Foundation\Tomcat 6.0'

CATALINA_BASEเหมือนกับCATALINA_HOME.


2
คำตอบของคุณทำให้เข้าใจผิด ... คำตอบที่ถูกต้องควรระบุหากไม่ได้กำหนดค่าหลายอินสแตนซ์ $ CATALINA_BASE จะเหมือนกับ $ CATALINA_HOME` ตามเอกสาร
Eddie B

1
CATALINA_BASE เท่ากับ CATALINA_HOME เฉพาะเมื่อคุณเรียกใช้อินสแตนซ์รูท เมื่อคุณมีหลายอินสแตนซ์มันจะแตกต่างกัน
ประกบ

1
ฉันจะบอกว่า CATALINA_BASE และ CATALINA HOME ควรจะแตกต่างกันแม้ว่าคุณจะมีเพียงอินสแตนซ์เดียวก็ตาม ด้วยวิธีนี้เนื้อหาของคุณจะแยกจากการติดตั้งของคุณ ตัวอย่างเช่น CATALINA_HOME ใน / usr / share / tomcat และ CATALINA_BASE ใน / var / lib / tomcat
user1725779

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