특정 사용자로 로그인 한 동안 존재하는 일부 백그라운드 프로세스를 실행해야합니다.
사용자 별 데몬과 같은 것이 있습니까? 컴퓨터가 종료 될 때까지 (또는 수동으로 시작 / 종료 할 때까지) 전역 데몬 만 알고 있습니다.
지금은 프로세스가 이미 존재하는지 확인하고 프로세스가 없으면 프로세스를 만드는 스크립트를 만들었습니다. 그런 다음이 스크립트는 nohup
my 의 명령으로 실행됩니다 .profile
. 이렇게하면 프로세스가 시작시 시작되고 한 번만 시작됩니다 (여러 rxvt
용어가 들어오고 나가 더라도 ). 그러나 내가 기록 한 후에는 결코 죽지 않습니다 (재해는 아니지만 프로세스를 종료하는 것이 더 깨끗합니다).
답변
systemd를 사용하면 사용자가 자체 시스템 인스턴스를 실행하여 개인 데몬을 관리 할 수 있습니다.
이미 시스템을 설치 한 경우을 systemd --user
실행하여 서비스를 시작 하고 관리하기 만하면됩니다 systemctl --user
. 에서 사용자 서비스를 검색합니다 ~/.config/systemd/user
.
기본적으로 systemd는 요청시 로그 아웃시 사용자 서비스를 종료합니다. 이 동작은 loginctl --enable-linger $USER
명령 을 사용하여 사용자를 유지함으로써 변경 될 수 있습니다 .
Mor 정보는 ArchWiki 페이지 에서 찾을 수 있습니다 .
답변
dbus 서비스는 precicely하기위한 것입니다. … 좋아, precicely 다음과 같이 사용할 수 있습니다 :-). 사용자 별 dbus 데몬은 사용자가 데스크탑 환경에 로그인 할 때 시작되고 사용자가 로그 아웃 할 때 종료됩니다 (의 매뉴얼 페이지 dbus-launch
및 옵션 참조 --exit-with-session
). dbus 서비스는 dbus 인스턴스와 함께 또는 서비스 인터페이스가 dbus를 통해 처음 호출 될 때 시작될 수 있습니다. 각 사용자는 사용자 홈의 숨겨진 디렉토리 또는 전역에 정의 된 고유 한 dbus 서비스 사양을 가질 수 있습니다 /etc
. 많은 문서와 참조 구현 에 대해서는 freedesktop의 dbus 홈페이지를 참조하십시오 .
요즘 데비안 기반 배포판 만 사용합니다. 모든 스크립트 /etc/X11/Xsession.d
는 문자열을 매우 자주 수정하는 스크립트를 가지고 있으며,이 스크립트는 마지막에 선택한 데스크탑 환경을 시작하는 명령으로 평가됩니다. dbus와 같은 명령이 dbus wrapper 명령 앞에 추가 dbus-launch
됩니다. 이 래퍼는 dbus 서버를 시작하고 적어도 바닐라 데비안에서 (그리고 모든 “데비안 기반 배포판에서”라고 말할 수 있습니다) dbus-launch
옵션이 제공 --exit-with-session
됩니다.
사용자가 dbus 서비스에 로그인 한 상태에서 실행하려는 프로세스를 래핑 할 수 있어야하며 IIRC dbus는 자동으로 종료하기 전에 서비스 종료를 처리합니다.
답변
BASH를 쉘로 사용하는 경우 ~ / .bash_logout에서 감지를 시도하고 실행중인 프로세스를 종료 할 수 있습니다.
아마도 장기적으로 찾고있는 것은 ConsoleKit 또는 systemd ‘s logind 와 같은 것과 상호 작용하는 것입니다 (예 : D- 버스를 통해) .