मैं कई उपयोगकर्ताओं के साथ लिनक्स सर्वर पर एडीबी चलाने की कोशिश कर रहा हूं जहां मैं रूट नहीं हूं (अपने एंड्रॉइड एमुलेटर के साथ खेलने के लिए)। एडीबी डेमन ने अपने लॉग को फाइल में लिखा है /tmp/adb.logजो दुर्भाग्य से एडीबी में हार्ड-कोडेड लगता है और यह स्थिति बदलने वाली नहीं है ।
तो, स्पष्ट त्रुटि देते हुए, adb चलाना विफल हो रहा है cannot open '/tmp/adb.log': Permission denied:। यह फ़ाइल किसी अन्य उपयोगकर्ता द्वारा बनाई गई है और /tmpइसमें थोड़ा सा चिपचिपा है। अगर मैं adb nodaemon serverइसे stdout को लिखने के साथ adb करना शुरू करता हूं , तो कोई त्रुटि नहीं होती है (मैं टकराव से बचने के लिए इसके पोर्ट को एक अद्वितीय मान पर सेट करता हूं)।
मेरा प्रश्न है: क्या ADB को किसी अन्य फ़ाइल से लिखने के लिए कोई रास्ता है /tmp/adb.log? अधिक आम तौर पर, क्या एक प्रक्रिया-विशिष्ट सीमलिंक बनाने का एक तरीका है? मैं /tmp/adb.logएक फ़ाइल के लिए सभी फ़ाइल एक्सेस को रीडायरेक्ट करना चाहता हूं ~/tmp/adb.log।
फिर से, मैं सर्वर पर रूट नहीं हूं, इसलिए chroot, mount -o rbindऔर chmodमान्य विकल्प नहीं हैं। यदि संभव हो तो, मैं एडीबी स्रोतों को संशोधित नहीं करना चाहूंगा, लेकिन निश्चित रूप से अगर कोई अन्य समाधान नहीं है, तो मैं ऐसा करूंगा।
पुनश्च विशिष्ट एडीबी मामले के लिए मैं इसके adb nodaemon serverसाथ चलने nohupऔर आउटपुट पुनर्निर्देशन का सहारा ले सकता हूं , लेकिन सामान्य प्रश्न अभी भी प्रासंगिक है।
LD_PRELOADट्रिक्स हैं, हालांकि यह अधिक जटिल होगा।
/home/$USER/tmp/adb.logऔर पुनर्निर्माण के लिए आसान होगा :)
/tmp/adb.logमाउंट कर सकते हैं, या/tmpपूरी तरह से अपना निजी माउंट कर सकते हैं। करman unshareऔरman namespacesऔरman nsenter।