मैं कई उपयोगकर्ताओं के साथ लिनक्स सर्वर पर एडीबी चलाने की कोशिश कर रहा हूं जहां मैं रूट नहीं हूं (अपने एंड्रॉइड एमुलेटर के साथ खेलने के लिए)। एडीबी डेमन ने अपने लॉग को फाइल में लिखा है /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
।