Tôi đang cố gắng chạy ADB trên máy chủ linux có nhiều người dùng mà tôi không root (để chơi với trình giả lập Android của tôi). Trình nền adb ghi nhật ký của nó vào tệp /tmp/adb.log, điều không may dường như được mã hóa cứng vào ADB và tình huống này sẽ không thay đổi .
Vì vậy, adb không chạy được, đưa ra lỗi rõ ràng : cannot open '/tmp/adb.log': Permission denied. Tập tin này được tạo bởi một người dùng khác và /tmpcó bit dính trên. Nếu tôi bắt đầu adb bằng adb nodaemon servercách làm cho nó ghi vào thiết bị xuất chuẩn, sẽ không có lỗi xảy ra (tôi cũng thiết lập cổng của nó thành một giá trị duy nhất để tránh xung đột).
Câu hỏi của tôi là: có cách nào để làm cho ADB ghi vào một tệp khác /tmp/adb.logkhông? Tổng quát hơn, có cách nào để tạo ra một loại liên kết tượng trưng cụ thể cho quá trình không? Tôi muốn chuyển hướng tất cả các tệp truy cập /tmp/adb.logđến, nói, một tệp ~/tmp/adb.log.
Một lần nữa, tôi không root trên máy chủ, vì vậy chroot, mount -o rbindvà chmodkhông phải là tùy chọn hợp lệ. Nếu có thể, tôi muốn không sửa đổi các nguồn ADB, nhưng chắc chắn nếu không có giải pháp nào khác, tôi sẽ làm điều đó.
PS Đối với trường hợp cụ thể của ADB tôi có thể nghỉ mát để chạy adb nodaemon servervới nohupvà chuyển hướng đầu ra, nhưng câu hỏi chung là vẫn có liên quan.
LD_PRELOADmánh khóe, mặc dù điều đó sẽ phức tạp hơn.
/home/$USER/tmp/adb.logvà xây dựng lại adb sẽ dễ dàng hơn :)
/tmp/adb.loghoặc thậm chí gắn kết riêng tư của nó/tmp. làmman unsharevàman namespacesvàman nsenter.