ฉันกำลังพยายามเรียกใช้ ADB บนเซิร์ฟเวอร์ linux ที่มีผู้ใช้หลายคนที่ฉันไม่ได้รูท (เล่นกับ android emulator ของฉัน) ภูต adb เขียนบันทึกของระบบไปยังแฟ้ม/tmp/adb.log
ซึ่งน่าเสียดายที่ดูเหมือนว่าจะยากเขียนเป็น ADB และสถานการณ์เช่นนี้จะไม่เกิดการเปลี่ยนแปลง
ดังนั้น adb cannot open '/tmp/adb.log': Permission denied
เป็นความล้มเหลวในการทำงานให้เกิดข้อผิดพลาดที่เห็นได้ชัด: ไฟล์นี้สร้างโดยผู้ใช้รายอื่นและ/tmp
มีบิตติดอยู่ ถ้าฉันเริ่ม adb ด้วยadb nodaemon server
การทำให้มันเขียนถึง stdout จะไม่มีข้อผิดพลาดเกิดขึ้น (ฉันยังตั้งค่าพอร์ตเป็นค่าที่ไม่ซ้ำกันเพื่อหลีกเลี่ยงความขัดแย้ง)
คำถามของฉันคือ: มีวิธีทำให้ ADB เขียนไปยังไฟล์อื่นกว่า/tmp/adb.log
? โดยทั่วไปแล้วจะมีวิธีสร้าง symlink เฉพาะกระบวนการหรือไม่ ฉันต้องการที่จะเปลี่ยนเส้นทางการเข้าถึงไฟล์ทั้งหมดเพื่อที่จะบอกว่าแฟ้ม/tmp/adb.log
~/tmp/adb.log
อีกครั้งผมไม่ได้รากบนเซิร์ฟเวอร์ดังนั้นchroot
, mount -o rbind
และchmod
ไม่ได้เป็นตัวเลือกที่ถูกต้อง ถ้าเป็นไปได้ฉันไม่ต้องการแก้ไขแหล่งที่มาของ ADB แต่แน่นอนว่าถ้าไม่มีวิธีแก้ไขปัญหาอื่น ๆ ฉันจะทำเช่นนั้น
ป.ล. สำหรับกรณี ADB เฉพาะฉันสามารถใช้adb nodaemon server
กับnohup
และเปลี่ยนเส้นทางการส่งออก แต่คำถามทั่วไปยังคงเกี่ยวข้อง
LD_PRELOAD
อุบายแม้ว่ามันจะซับซ้อนกว่า
/home/$USER/tmp/adb.log
และสร้าง adb :)
/tmp/adb.log
หรือแม้กระทั่งติดส่วนตัวของตัวเอง/tmp
โดยสิ้นเชิง ทำman unshare
และและman namespaces
man nsenter