मेरे पास एक वेबएप्प (nginx, gunicorn, python) है जो गिट पोस्ट हुक प्राप्त करता है और कमांड लाइन टूल (माणिक, कैपिस्ट्रानो) को चलाता है। सब कुछ एक उपयोगकर्ता नाम के माध्यम से चलाया जाता है deployer। कमांड लाइन टूल बहुत अच्छी तरह से चलता है और ssh के माध्यम से दूरस्थ सर्वर से जुड़ सकता है।
जब वेब इसे ट्रिगर करता है, तो यह ssh के माध्यम से कनेक्ट नहीं हो सकता है। एक पासवर्ड की आवश्यकता है। मुझे लगता है कि मुझे पता है कि इसे कैसे दरकिनार किया जाता है (मुझे यहां क्रोनॉजर्स के साथ एक समान समस्या थी: सर्वर की बढ़ती संख्या के कारण सर्वर की मौत हो जाती है ) लेकिन किसी तरह उपयोगकर्ता वेबैब में खाली है।
इस स्क्रिप्ट को देखते हुए:
#!/bin/bash
echo "$(whoami)"
जब मैं दौड़ता हूं deployer@tools:/srv/deployment$ ./test > test.txtतो test.txt में "परिनियोजक" होता है और फ़ाइल test.txtका स्वामित्व: परिनियोजक के पास होता है।
जब मैं अपने वेबऐप के भीतर से एक ही कमांड चलाता हूं तो test.txt खाली होता है (केवल एक लाइन ब्रेक होता है) लेकिन मालिक के स्वामित्व में: www-data (जैसा कि अपेक्षित है और gunicorn में कॉन्फ़िगर किया गया है)।
यह कैसे संभव है और मैं इसके बारे में क्या कर सकता हूं?
whoami, बस एक खाली फ़ाइल LINEBREAK बिना ही परिणाम लाता है (और मैं के साथ इसे चलाने os.system('cd /srv/deployment && ./test > test.txt')अजगर अनुप्रयोग के भीतर से।
os.system('whoami > test.txt'), या का उपयोग id -uकरने के बजाय whoami, या का उपयोग echo $USER?
whoamiशुद्ध रिटर्न रिटर्न के रूप में 0 के बजाय 127।
PATHआपके वेबऐप में क्या है ? क्या होगा यदि आप whoami( /usr/bin/whoami, IIRC) को पूर्ण पथ देते हैं ?
echo $(whoami)सिर्फ के बजाय क्यों भाग रहे होwhoami? और जब आप कहते हैं कि आप ऐप से एक ही कमांड चलाते हैं, तो आपने ऐसा कैसे किया?