2016-01-20 4 views
8

मैं बैश में एक ट्यूटोरियल पढ़ रहा था जहां उन्होंने मशीन को पुनरारंभ करने के लिए कहा था, सीधे सेवा को पुनरारंभ करने का कोई विकल्प नहीं था, यह मशीन को पुनरारंभ करने का मामला था, और फिर उसके बाद और अधिक कमांड थे जिन्हें अभी भी चलाने की आवश्यकता है प्रावधान करते समय।क्या वग्रेंट और पिकअप का उपयोग करके मशीन को प्रावधान करते समय मशीन को पुनरारंभ करना संभव है जहां स्क्रिप्ट छोड़ी गई थी?

तो क्या प्रावधान के दौरान एक बॉक्स को पुनरारंभ करने का कोई तरीका है और उसके बाद आपने इसे छोड़ दिया है?

+1

आप क्या प्रावधान प्रयोग करते हैं? – dizballanze

+0

[वानर vbguest प्लगइन] (https://github.com/dotless-de/vagrant-vbguest/) ऐसा करता है तो यह संभव होना चाहिए। कभी गहराई से न देखें कि वे कैसे कर रहे थे और इसकी प्लगइन थोड़ी अलग हो सकती है लेकिन आपको इस बिंदु पर –

+0

@dizballanze Bash कुछ अच्छा विचार मिल सकता है ... – leeand00

उत्तर

8

जहाँ तक मुझे पता के रूप में आप एक ही स्क्रिप्ट/कमांड, जैसे कि जहां यह दूर छोड़ दिया पर ले जाएगा अगर यह ओएस को पुनः आरंभ करने का प्रयास का सेट नहीं कर सकते हैं:

config.vm.provision "shell", inline: <<-SHELL 
    echo $(date) > ~/rebootexample 
    reboot 
    echo $(date) >> ~/rebootexample 
    SHELL 

इस उदाहरण में दूसरी गूंज कॉल नहीं किया जाएगा।

आप स्क्रिप्ट/कमांड को विभाजित कर सकते हैं और vagrant reload जैसे प्लगइन का उपयोग कर सकते हैं।

एक Vagrantfile का एक उदाहरण टुकड़ा अपने संभावित उपयोग उजागर करने के लिए:

# execute code before reload 
    config.vm.provision "shell", inline: <<-SHELL 
    echo $(date) > ~/rebootexample 
    SHELL 

    # trigger reload 
    config.vm.provision :reload 

    # execute code after reload 
    config.vm.provision "shell", inline: <<-SHELL 
    echo $(date) >> ~/rebootexample 
    SHELL 
3

मैंने कभी ऐसा नहीं किया है, लेकिन अगर मुझे स्क्रिप्ट को दो टुकड़ों में विभाजित करना पड़ेगा, तो पुनरारंभ करने से पहले एक, जिसमें पुनरारंभ कमांड शामिल है, फिर दूसरा पोस्ट इंस्टॉल हो।

पहला वाला लॉक फ़ाइल भी बनायेगा।

कुल स्क्रिप्ट पहली स्क्रिप्ट चलाएगी यदि लॉक फ़ाइल मौजूद नहीं है या फ़ाइल मौजूद है तो दूसरा स्थान चलाएं। स्टार्टअप के लिए यह समग्र लिपि स्थापित की जाएगी।

0

एक चाल आप उपयोग कर सकते हैं बूट पर चलाने के लिए पुनः आरंभ संकेत भेजने और एक स्क्रिप्ट के रूप में प्रावधान काम के बाकी को बचाने के लिए है:

config.vm.provision "shell", inline: <<-SHELL 
    echo "Do your thing... DONE" 
cat <<-RCLOCAL | sed -s 's_^  __' > /etc/rc.local 
     #!/bin/bash 
     echo "This will be run once on next boot and then it's destroyed and never run again" 
     rm /etc/rc.local 
RCLOCAL 
    chmod o+x /etc/rc.local 
    shutdown -r now #restart 
SHELL 

यह तो आप सेवाओं को सक्षम या आप कुछ और ही चला रहे हैं अगले बूट पर चलाने के लिए bootsrapped एक और तरीका अपना कोड प्राप्त करने को खोजने के लिए आवश्यकता हो सकती है, डेबियन 9 पर काम करने के परीक्षण किया गया था।

दुर्भाग्य से आप बस नहीं कर सकते:

config.vm.provision "shell", inline: "shutdown -r now" 
config.vm.provision "shell", inline: "echo 'hello world'" 

results in ==> 
The SSH connection was unexpectedly closed by the remote end. This 
usually indicates that SSH within the guest machine was unable to 
properly start up. Please boot the VM in GUI mode to check whether 
it is booting properly. 
संबंधित मुद्दे