Bazel सिस्टम को लंबे समय तक चलने वाली सर्वर प्रोसेस के तौर पर लागू किया जाता है. इससे, एक साथ कई प्रोसेस लागू करने की सुविधा के मुकाबले, कई ऑप्टिमाइज़ेशन किए जा सकते हैं. जैसे, एक से दूसरे बिल्ड में BUILD फ़ाइलों, डिपेंडेंसी ग्राफ़, और अन्य मेटाडेटा को कैश मेमोरी में सेव करना. इससे इंक्रीमेंटल बिल्ड की स्पीड बेहतर होती है. साथ ही, 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
के कुछ अन्य विकल्पों के साथ, Basel सर्वर प्रोसेस को सिर्फ़ java
नाम दिया जा सकता है.) Basel सर्वर को शटडाउन कमांड का इस्तेमाल करके बंद किया जा सकता है.
bazel
चलाते समय, क्लाइंट सबसे पहले यह जांच करता है कि सर्वर सही वर्शन है या नहीं. अगर ऐसा नहीं होता है, तो सर्वर रुक जाता है और नया वर्शन चालू हो जाता है. इससे यह पक्का होता है कि लंबे समय तक चलने वाली सर्वर प्रोसेस का इस्तेमाल, वर्शनिंग में रुकावट न डाले.