Tôi đã tạo một tập lệnh trong /etc/init.d/ để chạy một số tập lệnh khác từ những người dùng khác (không có quyền root) từ thư mục chính của họ, như thể họ đã khởi động chúng.
Tôi khởi chạy các tập lệnh này với: sudo -b -u <username> <script_of_a_particular_user>
Và nó hoạt động. Nhưng đối với mọi tập lệnh người dùng tiếp tục chạy (ví dụ như một số watchdog) tôi thấy một quá trình sudo cha tương ứng, vẫn còn sống và chạy như root. Điều này tạo ra một mớ hỗn độn trong danh sách các quy trình hoạt động.
Vì vậy, câu hỏi của tôi là: Làm thế nào tôi có thể khởi chạy (fork) một tập lệnh khác từ tập lệnh bash hiện có với tư cách là một người dùng khác và để nó như một quá trình mồ côi (độc lập)?
Giải thích chi tiết hơn:
Về cơ bản, tôi đang cố gắng cung cấp cho người dùng khác trên máy một phương tiện để chạy công cụ khi khởi động hệ thống hoặc tắt hệ thống bằng cách chạy các tệp thực thi được tìm thấy trong thư mục con tương ứng được tìm thấy trong thư mục chính của họ, có tên .startUp và .shutDown. Vì tôi không tìm thấy bất kỳ phương tiện nào khác để làm điều đó nên tôi đã viết tập lệnh bash của mình, chính xác là nó và tôi đã cấu hình nó như một tập lệnh dịch vụ (bằng cách làm theo ví dụ về bộ xương) trong /etc/init.d/ để khi nó được chạy với đối số bắt đầu, nó khởi chạy mọi thứ từ các thư mục .startUp và khi nó được chạy với đối số dừng, nó khởi chạy mọi thứ từ các thư mục .shutDown của tất cả người dùng như chúng.
Ngoài ra, tôi cũng quan tâm nếu tôi có thể sử dụng một số giải pháp hiện có để giải quyết vấn đề này.
CẬP NHẬT
Tôi đã xem xét xung quanh một chút và tôi tìm thấy câu hỏi này:
/unix/22478/detach-a-daemon-USE-sudo
Chấp nhận câu trả lời ở đó, để sử dụng : sudo -u user sh -c "daemon & disown %1"
, hoạt động cho tôi. Nhưng tôi cũng đã thử mà không từ chối% 1 và nó cũng như vậy. Vì vậy, đây là những gì làm việc cho tôi như tôi mong đợi:
sudo -u <username> bash -c "<script_of_a_particular_user> &"
Câu hỏi bổ sung của tôi bây giờ là, tại sao nó hoạt động mà không bị từ chối? Tôi vẫn nên rời khỏi cuộc gọi từ chối , bất kể, đối với một số trường hợp đặc biệt tiềm năng?
CẬP NHẬT 2
Rõ ràng điều này cũng hoạt động:
su <username> -c "<script_of_a_particular_user> &"
Có sự khác biệt nào giữa cuộc gọi này và cuộc gọi sudo không? Tôi biết đây có khả năng là một câu hỏi hoàn toàn khác. Nhưng vì tôi đang tìm câu trả lời ở đây, có lẽ vì lợi ích của chủ đề này, ai đó có thể làm rõ điều này ở đây.
CẬP NHẬT 3
Cả hai phương thức này với su hoặc sudo hiện tạo ra một quy trình startpar mới (quy trình đơn chạy dưới dạng root) sau khi tôi khởi động máy. Hiển thị trong danh sách quy trình như:
startpar -f -- <name_of_my_init.d_script>
Tại sao quá trình này sinh sản? Rõ ràng là tôi đang làm gì đó sai vì không có tập lệnh init.d nào khác có quá trình này chạy.
CẬP NHẬT 4
Vấn đề với startpar được giải quyết. Tôi đã bắt đầu một câu hỏi khác cho điều đó:
quá trình startpar bị treo khi bắt đầu các quy trình từ RC.local hoặc init.d
Và một câu hỏi khác để thảo luận thêm về các cơ chế khởi chạy cho người dùng không có đặc quyền:
Cung cấp cho người dùng bình thường (không phải root) khả năng khởi động và tắt tự động