Bazel सिस्टम को लंबे समय तक चलने वाली सर्वर प्रोसेस के तौर पर लागू किया जाता है. इससे बैच पर आधारित कई तरह के ऑप्टिमाइज़ेशन करने में मदद मिलती है. जैसे, बिल्ड फ़ाइलों को कैश मेमोरी में सेव करना, डिपेंडेंसी ग्राफ़, और एक बिल्ड से दूसरे मेटाडेटा तक. इससे इंक्रीमेंटल बिल्ड की स्पीड बेहतर होती है. साथ ही, build
और query
जैसे अलग-अलग निर्देशों को, लोड किए गए पैकेज का एक ही कैश शेयर करने की अनुमति मिलती है. इससे क्वेरी बहुत तेज़ी से की जा सकती हैं. हर सर्वर एक बार में ज़्यादा से ज़्यादा एक कॉल हैंडल कर सकता है. एक साथ कई कॉल करने पर, कॉल ब्लॉक हो जाएगा या तुरंत बंद हो जाएगा (--block_for_lock
देखें).
bazel
को चलाने का मतलब है कि क्लाइंट को चलाया जा रहा है. क्लाइंट, आउटपुट बेस के आधार पर सर्वर ढूंढता है. यह डिफ़ॉल्ट रूप से, बेस वर्कस्पेस डायरेक्ट्री के पाथ और आपके उपयोगकर्ता आईडी से तय होता है. इसलिए, अगर एक से ज़्यादा वर्कस्पेस में बिल्ड किया जाता है, तो आपके पास एक से ज़्यादा आउटपुट बेस होंगे और इसलिए, एक से ज़्यादा Bazel सर्वर प्रोसेस होंगी. एक वर्कस्टेशन पर मौजूद कई उपयोगकर्ता,
एक ही वर्कस्पेस में एक साथ बिल्ड कर सकते हैं, क्योंकि उनके आउटपुट बेस अलग-अलग होंगे
(अलग-अलग यूज़र आईडी).
अगर क्लाइंट को कोई चालू सर्वर इंस्टेंस नहीं मिलता है, तो वह एक नया इंस्टेंस शुरू करता है. यह ऐसा करके करता है कि यह देखता है कि आउटपुट बेस पहले से मौजूद है या नहीं. इसका मतलब है कि blaze संग्रह पहले ही अनपैक हो चुका है. अगर आउटपुट बेस मौजूद नहीं है, तो क्लाइंट संग्रह की फ़ाइलों को अनज़िप करता है और अपने mtime
को आने वाले नौ साल के बाद की तारीख पर सेट करता है. इंस्टॉल होने के बाद, क्लाइंट पुष्टि करता है कि अनज़िप की गई फ़ाइलों के mtime
आखिरी तारीख के बराबर हैं, ताकि यह पक्का किया जा सके कि इंस्टॉलेशन के साथ कोई छेड़छाड़ न हुई हो.
कोई गतिविधि न होने पर, सर्वर प्रोसेस बंद हो जाएगी. डिफ़ॉल्ट रूप से, यह प्रोसेस तीन घंटे तक चलती है. इसे स्टार्टअप विकल्प --max_idle_secs
का इस्तेमाल करके बदला जा सकता है. ज़्यादातर मामलों में, उपयोगकर्ता को यह पता नहीं चलता कि सर्वर चल रहा है. हालांकि, कभी-कभी इस बात का ध्यान रखना ज़रूरी होता है. उदाहरण के लिए, अगर ऐसी स्क्रिप्ट चलाई जा रही हैं जो अलग-अलग डायरेक्ट्री में अपने-आप कई बिल्ड करती हैं, तो यह पक्का करना ज़रूरी है कि आपके पास बहुत सारे खाली सर्वर न हों. ऐसा करने के लिए, स्क्रिप्ट के पूरा हो जाने पर उन्हें साफ़ तौर पर बंद करें या उन्हें थोड़े समय के लिए बंद करने का समय तय करें.
Bazel सर्वर प्रोसेस का नाम, ps x
या ps -e f
के आउटपुट में bazel(dirname)
के तौर पर दिखता है. यहां dirname, आपकी फ़ाइल फ़ोल्डर की रूट डायरेक्ट्री को शामिल करने वाली डायरेक्ट्री का बेस नाम है. उदाहरण के लिए:
ps -e f
16143 ? Sl 3:00 bazel(src-johndoe2) -server -Djava.library.path=...
इससे यह पता लगाना आसान हो जाता है कि कौनसी सर्वर प्रोसेस किसी वर्कस्पेस से जुड़ी है. (ध्यान रखें कि ps
के कुछ अन्य विकल्पों के साथ, Bazel सर्वर प्रोसेस का नाम सिर्फ़ java
हो सकता है.) shutdown कमांड का इस्तेमाल करके, Bazel सर्वर बंद किए जा सकते हैं.
bazel
चलाते समय, क्लाइंट सबसे पहले यह जांच करता है कि सर्वर सही वर्शन है या नहीं. अगर ऐसा नहीं होता है, तो सर्वर रुक जाता है और नया वर्शन चालू हो जाता है. इससे यह पक्का होता है कि लंबे समय तक चलने वाली सर्वर प्रोसेस का इस्तेमाल, वर्शनिंग में रुकावट न डाले.