특정 사용자로 로그인되어 있는 동안 존재하는 일부 백그라운드 프로세스를 실행해야 합니다.
사용자별 데몬 같은 것이 있나요? 나는 컴퓨터 시작부터 종료(또는 수동 시작/종료)까지 전역 데몬에 대해서만 알고 있습니다.
이제 프로세스가 이미 존재하는지 확인하고, 없으면 생성하는 스크립트를 만들었습니다. 그런 다음 nohup
내 것을 사용하십시오 .profile
. 이렇게 하면 프로세스가 시작 시 시작되고 한 번만 시작됩니다(여러 rxvt
용어가 왔다가 사라지더라도). 그러나 로그인한 후에는 결코 종료되지 않습니다(재난은 아니지만 프로세스를 종료하는 것이 더 깔끔할 것입니다).
답변1
systemd를 사용하면 사용자가 자신의 systemd 인스턴스를 실행하여 개인 데몬을 관리할 수 있습니다.
systemd --user
이미 systemd가 설치되어 있는 경우 를 실행하여 서비스를 시작하고 관리하기 만 하면 됩니다 systemctl --user
. 사용자 서비스는 에서 검색됩니다 ~/.config/systemd/user
.
기본적으로 systemd는 로그아웃 시 사용자 서비스를 종료합니다(요청에 따라). 이 동작은 이 명령을 사용하여 사용자에 대한 연기를 활성화함으로써 변경될 수 있습니다 loginctl --enable-linger $USER
.
자세한 내용은 다음에서 확인할 수 있습니다.건축 위키 페이지.
답변2
dbus 서비스는 정확히 이 목적으로 사용됩니다. 음, 이 목적으로 사용될 수 있습니다 :-). 사용자별 dbus 데몬은 사용자가 데스크탑 환경에 로그인할 때 시작되고 사용자가 로그아웃할 때 종료됩니다(맨 페이지 dbus-launch
및 옵션 참조 --exit-with-session
). dbus 서비스는 dbus 인스턴스와 함께 시작되거나 dbus를 통해 서비스의 인터페이스가 처음 호출될 때 시작될 수 있습니다. 각 사용자는 사용자 홈 디렉터리의 숨겨진 디렉터리에 정의되거나 에서 전역적으로 정의된 자신만의 dbus 서비스 사양을 가질 수 있습니다 /etc
.freedesktop의 dbus 홈페이지광범위한 문서 및 참조 구현.
요즘에는 데비안 기반 배포판만 사용합니다. 이러한 모든 스크립트에는 /etc/X11/Xsession.d
선택한 데스크탑 환경을 시작하는 명령으로 최종적으로 평가될 문자열을 자주 수정하는 스크립트가 있습니다. dbus에는 명령 앞에 dbus 래퍼를 추가하는 스크립트가 있습니다 dbus-launch
. 이 래퍼는 dbus 서버를 시작하고 최소한 바닐라 데비안("모든 데비안 기반 배포판에서"라고 말하고 싶습니다) dbus-launch
옵션을 제공합니다 --exit-with-session
.
사용자가 dbus 서비스에 로그인할 때 실행하려는 프로세스를 래핑할 수 있어야 하며, IIRC dbus는 종료하기 전에 해당 서비스를 자동으로 종료합니다.