Có cái gì đó giống như một daemon cho mỗi người dùng?


11

Tôi cần chạy một số quy trình nền sống miễn là tôi đã đăng nhập với một người dùng nhất định.

Có tồn tại một cái gì đó giống như một daemon cho mỗi người dùng? Tôi chỉ biết các trình tiện ích toàn cầu sống từ khi khởi động máy tính 'cho đến khi tắt máy (hoặc khởi động / tắt thủ công).

bây giờ tôi đã tạo một kịch bản kiểm tra xem quy trình đã tồn tại chưa và tạo quy trình nếu không. Kịch bản này sau đó được chạy với nohuplệnh từ của tôi .profile. Bằng cách này, quá trình khởi chạy khi khởi động và chỉ được khởi chạy một lần (ngay cả khi có nhiều rxvtđiều khoản đến và đi). Tuy nhiên, nó không bao giờ bị giết sau khi tôi đăng nhập (đó không phải là thảm họa nhưng cũng sẽ sạch hơn khi chấm dứt quá trình).

Câu trả lời:


9

systemd cho phép người dùng chạy các cá thể systemd của riêng họ để quản lý các daemon riêng.

Nếu bạn đã cài đặt systemd, tất cả những gì bạn phải làm là khởi chạy systemd --uservà quản lý dịch vụ của mình bằng cách chạy systemctl --user. Dịch vụ người dùng sẽ được tìm kiếm trong ~/.config/systemd/user.

Theo mặc định systemd sẽ giết dịch vụ người dùng khi đăng xuất (như bạn yêu cầu). Hành vi này có thể được thay đổi bằng cách cho phép nán lại cho người dùng bằng loginctl --enable-linger $USERlệnh.

Thông tin Mor có thể được tìm thấy trên trang ArchWiki .


1
Có một cài đặt để làm cho linger enable hoạt động từ một tệp cấu hình thay vì lệnh bash.
CMCDragonkai

4

Dịch vụ dbus có nghĩa là ... ok, nó có thể được sử dụng chính xác là :-). Dbus deamon trên mỗi người dùng được bắt đầu khi người dùng đăng nhập vào môi trường máy tính để bàn và bị chấm dứt khi người dùng đăng xuất (xem trang hướng dẫn dbus-launchvà tùy chọn --exit-with-session). Một dịch vụ dbus có thể được bắt đầu cùng với phiên bản dbus hoặc khi giao diện của dịch vụ được gọi lần đầu tiên thông qua dbus. Mỗi người dùng có thể có thông số kỹ thuật dịch vụ dbus riêng, được xác định trong một thư mục ẩn trong nhà người dùng hoặc trên toàn cầu /etc. Xem trang chủ của dbus trên freedesktop để biết nhiều tài liệu và triển khai tham khảo.

Tôi chỉ sử dụng distro dựa trên Debian những ngày này. Tất cả những người có tập lệnh trong /etc/X11/Xsession.dđó rất thường xuyên sửa đổi một chuỗi mà ở cuối sẽ được đánh giá là lệnh bắt đầu môi trường máy tính để bàn đã chọn. Có một kịch bản như vậy cho dbus, trong đó chuẩn bị lệnh với trình bao bọc dbus dbus-launch. Trình bao bọc này khởi chạy một máy chủ dbus và ít nhất là trên vanilla Debian (và tôi sẵn sàng nói "trên tất cả các bản phát hành dựa trên Debian") dbus-launchđược cung cấp tùy chọn --exit-with-session.

Bạn sẽ có thể bao bọc các quy trình bạn muốn chạy trong khi người dùng đăng nhập vào dịch vụ dbus và IIRC dbus tự động chăm sóc việc chấm dứt dịch vụ của mình trước khi thoát.


2

Nếu bạn đang sử dụng BASH làm vỏ của mình, bạn có thể thử thực hiện một số phát hiện trong ~ / .bash_logout và tắt quá trình đang chạy.

Những gì bạn có thể đang tìm kiếm trong dài hạn là tương tác (ví dụ thông qua D-Bus) với một cái gì đó như logind của ConsoleKit hoặc systemd .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.