apakah ada sesuatu seperti daemon per pengguna?

11

Saya perlu menjalankan beberapa proses latar belakang yang hidup selama saya masuk dengan pengguna tertentu.

Apakah ada sesuatu seperti daemon per pengguna? Saya hanya tahu daemon global yang hidup dari startup komputer 'sampai shutdown (atau startup manual / bunuh).

untuk saat ini saya membuat skrip yang memeriksa apakah proses sudah ada dan membuat proses jika tidak. Script ini kemudian dijalankan dengan nohupperintah dari my .profile. Dengan cara ini proses diluncurkan pada startup, dan hanya diluncurkan sekali (bahkan dengan beberapa rxvtistilah yang datang dan pergi). Namun, itu tidak pernah terbunuh setelah saya log (yang bukan bencana tetapi lebih bersih juga untuk menghentikan proses).

romeovs
sumber

Jawaban:

9

systemd memungkinkan pengguna untuk menjalankan instance systemd mereka sendiri untuk mengelola daemon pribadi.

Jika Anda sudah menginstal systemd, yang harus Anda lakukan adalah meluncurkan systemd --userdan mengelola layanan Anda dengan menjalankan systemctl --user. Layanan pengguna akan dicari di ~/.config/systemd/user.

Secara default systemd akan mematikan layanan pengguna saat keluar (seperti yang Anda minta). Perilaku ini dapat diubah dengan mengaktifkan berlama-lama untuk pengguna dengan loginctl --enable-linger $USERperintah.

Informasi lebih lanjut dapat ditemukan di halaman ArchWiki .

aekojouz
sumber
1
Apakah ada pengaturan untuk mengaktifkan fungsi berlama-lama dari file konfigurasi alih-alih perintah bash.
CMCDragonkai
4

Layanan dbus dimaksudkan untuk precicely that ... ok, dapat digunakan untuk precicely itu :-). Deamon dbus per pengguna dimulai ketika pengguna log in ke lingkungan desktop dan diakhiri ketika pengguna logout (lihat halaman dbus-launchmanual dan opsi --exit-with-session). Layanan dbus dapat dimulai bersama dengan instance dbus atau ketika antarmuka layanan disebut pertama kali melalui dbus. Setiap pengguna dapat memiliki spesifikasi layanan dbus sendiri, ditentukan dalam direktori tersembunyi di rumah pengguna, atau secara global masuk /etc. Lihat beranda dbus di freedesktop untuk banyak dokumentasi dan implementasi referensi.

Saya hanya menggunakan distro berbasis Debian hari ini. Semua yang memiliki skrip di /etc/X11/Xsession.dmana sangat sering memodifikasi string yang pada akhirnya akan dievaluasi sebagai perintah yang memulai lingkungan desktop yang dipilih. Ada satu skrip untuk dbus, yang menambahkan perintah dengan dbus wrapper dbus-launch. Wrapper ini meluncurkan server-dbus dan setidaknya pada vanilla Debian (dan saya bersedia mengatakan "pada semua distro berbasis Debian") dbus-launchdiberikan pilihan --exit-with-session.

Anda harus dapat membungkus proses yang ingin Anda jalankan saat pengguna masuk ke layanan dbus dan IIRC dbus secara otomatis menghentikan layanannya sebelum keluar.

Bananguin
sumber
2

Jika Anda menggunakan BASH sebagai shell Anda, Anda dapat mencoba melakukan beberapa deteksi di ~ / .bash_logout dan matikan proses yang sedang berjalan.

Apa yang mungkin Anda cari dalam jangka panjang adalah berinteraksi (mis. Via D-Bus) dengan sesuatu seperti ConsoleKit atau systemd's logind .

peterph
sumber