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