मेरे पास एक bash स्क्रिप्ट है जो एक python3 स्क्रिप्ट शुरू करता है (इसे कॉल करें startup.sh
), कुंजी लाइन के साथ:
nohup python3 -u <script> &
जब मैं ssh
सीधे और इस स्क्रिप्ट को कॉल करता हूं , तो मेरे बाहर निकलने के बाद अजगर स्क्रिप्ट पृष्ठभूमि में चलती रहती है। हालाँकि, जब मैं इसे चलाता हूं:
ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "./startup.sh"
प्रक्रिया समाप्त होते ही ssh
इसे चलाना समाप्त कर दिया और सत्र बंद कर दिया।
दोनों के बीच क्या अंतर है?
EDIT: पाइथन स्क्रिप्ट बोतल के माध्यम से एक वेब सेवा चला रही है।
EDIT2: मैंने एक इनिट स्क्रिप्ट बनाने की कोशिश की जो कॉल startup.sh
और भाग गई ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> "sudo service start <servicename>"
, लेकिन एक ही व्यवहार मिला।
EDIT3: हो सकता है कि यह स्क्रिप्ट में कुछ और हो। यहाँ स्क्रिप्ट का थोक है:
chmod 700 ${key_loc}
echo "INFO: Syncing files."
rsync -azP -e "ssh -i ${key_loc} -o StrictHostKeyChecking=no" ${source_client_loc} ${remote_user}@${remote_hostname}:${destination_client_loc}
echo "INFO: Running startup script."
ssh -i ${key_loc} -o StrictHostKeyChecking=no ${remote_user}@${remote_hostname} "cd ${destination_client_loc}; chmod u+x ${ctl_script}; ./${ctl_script} restart"
EDIT4: जब मैं अंत में एक नींद के साथ अंतिम पंक्ति चलाता हूं:
ssh -i ${key_loc} -o StrictHostKeyChecking=no ${remote_user}@${remote_hostname} "cd ${destination_client_loc}; chmod u+x ${ctl_script}; ./${ctl_script} restart; sleep 1"
echo "Finished"
यह कभी नहीं पहुंचता है echo "Finished"
, और मैं बोतल सर्वर संदेश देखता हूं, जिसे मैंने पहले कभी नहीं देखा था:
Bottle vx.x.x server starting up (using WSGIRefServer())...
Listening on <URL>
Hit Ctrl-C to quit.
मुझे "समाप्त" दिखाई देता है यदि मैं मैन्युअल रूप से SSH करता हूं और प्रक्रिया को स्वयं मारता हूं।
EDIT5: EDIT4 का उपयोग करते हुए, यदि मैं किसी भी समापन बिंदु के लिए अनुरोध करता हूं, तो मुझे एक पृष्ठ वापस मिल जाता है, लेकिन बोतल त्रुटियां समाप्त हो जाती हैं:
Bottle vx.x.x server starting up (using WSGIRefServer())...
Listening on <URL>
Hit Ctrl-C to quit.
----------------------------------------
Exception happened during processing of request from ('<IP>', 55104)
strace
कि यदि आप लिनक्स का उपयोग कर रहे हैं या truss
यदि आप सोलारिस चला रहे हैं तो देखें कि यह कैसे / क्यों समाप्त होता है। उदाहरण के लिए ssh -i <keyfile> -o StrictHostKeyChecking=no <user>@<hostname> strace -fo /tmp/debug ./startup.sh
।
&
स्टार्ट अप स्क्रिप्ट के अंत में उपयोग करने की कोशिश की ? जोड़ा जा रहा है &
पैरेंट आईडी (जब माता-पिता आईडी तो मर जाते हैं अपने बच्चों को करते हैं) किया जा रहा से अपने ssh सत्र की निर्भरता दूर ले जाता है। इसके अलावा मुझे लगता है कि यह इस पिछले पोस्ट पर आधारित एक डुप्लिकेट प्रश्न है । पिछले वाक्य में मैंने आपको जो पोस्ट सौंपी है, वह इस पोस्ट की एक डुप्लिकेट है जो बेहतर विवरण प्रदान कर सकती है।
nohup ./startup.sh &
पहले भी कोशिश की है , लेकिन यह एक ही व्यवहार था। startup.sh
पहले से ही एक कांटा शामिल है ( nohup python3 -u <script> &
), इसलिए मुझे पूरा यकीन है कि मुझे फिर से कांटा लगाने की जरूरत नहीं है।