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