मुझे लगता है कि मैंने वर्तमान में यहां प्रस्तुत किए गए लोगों की तुलना में बेहतर समाधान पाया है। भाग में क्योंकि जहां तक मैं बता सकता हूं कि cgmanager मर चुका है, भाग में, क्योंकि मेरा समाधान हैकसी वर्कअराउंड की तरह महसूस नहीं करता है, लेकिन ज्यादातर क्योंकि यह चर्चा अभी भी समस्या का समाधान खोजते समय दिखाई देती है। यह वास्तव में बहुत आसान है: systemd उपयोगकर्ता मोड का उपयोग करें ।
यदि आप सिस्टमड का उपयोग नहीं करते हैं तो यह समाधान मदद करने वाला नहीं है। उस स्थिति में मैं आपको यह पता लगाने की सलाह दूंगा कि यदि आपके init सिस्टम में अप्रभावी उपयोगकर्ताओं को बूट पर सेवाएं चलाने और शुरुआती बिंदु के रूप में उपयोग करने की अनुमति देने का कोई तरीका है।
सिस्टम रहित उपयोगकर्ता मोड का उपयोग अनप्रोविलेड एलएनजी कंटेनर को ऑटोस्टार्ट करने के लिए
मैं मान रहा हूँ कि आपके पास अनपेक्षित lxc कंटेनर ठीक से काम कर रहे हैं और जो lxc-autostart
कंटेनर के उपयोगकर्ता के रूप में चल रहा है । यदि ऐसा है, तो निम्न कार्य करें:
~/.config/systemd/user/lxc-autostart.service
जो भी उपयोगकर्ता के पास lxc कंटेनर हैं उनके घर में फ़ाइल बनाएँ :
[Unit]
Description="Lxc-autostart for lxc user"
[Service]
Type=oneshot
ExecStart=/usr/bin/lxc-autostart
ExecStop=/usr/bin/lxc-autostart -s
RemainAfterExit=1
[Install]
WantedBy=default.target
- फिर उस उपयोगकर्ता के चलने के रूप में:
systemctl --user enable lxc-autostart
(ध्यान दें, --user
विकल्प बताता है कि आप इसे उपयोगकर्ता मोड में उपयोग कर रहे हैं।
- फिर निम्नलिखित को चलाएँ, जहाँ
$user
उस उपयोगकर्ता का नाम है जिसमें lxc कंटेनर हैं:
sudo loginctl enable-linger $user
सिस्टमड के लिए $user
बूट पर सिस्टमड यूजर उदाहरण शुरू करना आवश्यक है । अन्यथा यह केवल एक ही समय में $user
लॉग इन शुरू करेगा ।
अधिक जानकारी के लिए मैं आर्चलिनक्स विकी सिस्टेम / टाइमर पेज और सिस्टेम मैन पेज की सिफारिश करूंगा ।
उपयोगकर्ता के सिस्टमड उदाहरण को रूट के रूप में एक्सेस करना
आप वास्तव में उपयोगकर्ता की systemd सेवा को रूट के रूप में शुरू / रोक सकते हैं / कर सकते हैं, हालाँकि इसके लिए आपको XDG_RUNTIME_DIR
पर्यावरण चर सेट करना होगा । मान लें $user
कि उपयोगकर्ता जिसका उदाहरण आप एक्सेस करना चाहते हैं और $uid
यह uid है, तो यह है कि आप lxc-autostart.service को कैसे शुरू करेंगे:
sudo -u $user XDG_RUNTIME_DIR=/run/user/$uid systemctl --user start lxc-autostart
तुम भी systemd-run
उस उपयोगकर्ता के रूप में मनमाने ढंग से आदेशों को चलाने के लिए उपयोग कर सकते हैं जो कि lxc को नहीं तोड़ता है। मैं बैकअप से पहले / बाद में अपने कंटेनरों को रोकने / शुरू करने के लिए निम्नलिखित कमांड का उपयोग कर रहा हूं, जहां $name
lxc कंटेनर का नाम है जिसे बैकअप किया जा रहा है:
sudo -u $user XDG_RUNTIME_DIR=/run/user/$uid systemd-run --user --wait lxc-stop -n $name
sudo -u $user XDG_RUNTIME_DIR=/run/user/$uid systemd-run --user --scope lxc-start -n $name
(ध्यान दें कि --wait
सिस्टमड-रन के बिना कंटेनर बंद नहीं होता है।)