사용자 로그인 후 시스템 서비스를 시작하고 사용자 로그 아웃 전에 중지하는 방법


10

Fedora 23 Machine이 있습니다.

로컬 / home 디렉토리를 원격 디렉토리 (NAS 시스템의)와 동기화하는 디렉토리 / 파일 동기화 bash 스크립트가 있습니다. 수동으로 실행하지만 시스템 서비스를 만들고 더 유연하게 만들고 싶습니다. 다른 사람들이 자신의 사용자 자격 증명으로 내 PC를 사용하기 때문에 사용자가 언제 로그인하고 서비스를 시작했는지 알고 싶습니다.

서비스의 시스템 파일에서 수행 할 수있는 작업이 있습니까, 아니면 스크립트의 코드에서 확인해야합니까?

$ USER와 같은 환경 변수에 액세스하고 서비스로 실행하기 만하면됩니다.

문서 내 주요 소스는이 링크입니다 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sect-Managing_Services_with_systemd-Unit_Files.html


systemctl --userF23 에서 작동 합니까 ?
user1686

그렇게 생각합니다. 목록과 메시지를 반환합니다 76 loaded units listed.
GeorgeKaf

: 여기 당신을 위해 작동 할 수 있습니다 또 다른 접근 방식 unix.stackexchange.com/a/109270/111707 쓰기 당신이에서 시작 작은 파이썬 스크립트 .bashrc로그인시가, 그때는 그놈 로그 아웃 신호 및 종료 자체를 수신은.
IanB

@IanB 감사합니다. 테스트하겠습니다. 주변에 그런 것이 있으면 결코 아프지 않습니다.
GeorgeKaf

답변:


15

systemd를 사용 하면 이미 사용자 세션에 대한 지원이 포함되어 있습니다.

서비스 디렉토리를 만듭니다

mkdir -p $HOME/.local/share/systemd/user

서비스 파일 편집 (vim, gedit, geany-원하는대로)

vim $HOME/.local/share/systemd/user/my.service

영구적 인 서비스라면 대략 다음과 같아야합니다.

[Unit]
Description=My very own Service
[Service]
Type=simple
TimeoutStartSec=0
ExecStart=/path/to/start/script arguments
[Install]
WantedBy=default.target

그러나 한 번 트리거 한 다음 잘 사용하는 것처럼 들리므로 다음과 같이 oneshot 구성을 사용하십시오.

[Service]
Type=oneshot
RemainAfterExit=true
StandardOutput=journal
ExecStart=/path/to/start/script arguments
ExecStop=/path/to/stop/script arguments
[Install]
WantedBy=default.target

물론 이것은 스크립트가 실행 가능한 것으로 가정합니다.

chmod a+x /path/to/start/script
chmod a+x /path/to/stop/script

그렇지 않으면 해당 통역사의 경로를 추가해야합니다.

ExecStart=/bin/bash /path/to/start/script arguments

이제 시스템을 다시로드하고 테스트를 위해 다시 로그인하십시오.

systemctl --user enable my.service # enables the service
systemctl --user # should display your new unit in the list
journalctl --user should show the log

더 많은 정보가 필요하면 예를 들어 Arch-Wiki 를 참조하십시오 . askubuntu 스레드에는 우연히 내 것을 포함한 다양한 아이디어가 있습니다.

서비스를 전체적으로 정의하여 동작을 루트 인 경우 다른 사용자로 확장 할 수 있습니다. 이렇게하려면 $ HOME / .local / share / systemd / user가 아닌 / usr / share / systemd / user /에 서비스 파일을 작성해야합니다 .


1
안녕, 대답은 좋았다. 그러나 처음 로그인 할 때 서비스를 시작 하고 마지막 사용자 세션 에서 중지 해야하는 경우에만 작동합니다 .
Anwar

4
서비스를 활성화 할 때 --user 플래그가 필요합니다. "systemctl --user enable my.service"
blushrt

0

나는 몇 살이 된 것을 알고 있지만 anx의 대답은 나를 도왔습니다. 그래서 나는 여전히 관련이 있다고 생각합니다. 또한 이것은 더 많은 의견이지만, 그 권한이 없으므로 "답변"으로 게시합니다. 여하튼...

Linux Mint 19를 실행하면 스크립트가 '$ HOME / .local / share / systemd / user'에있을 때 서비스를 "활성화"할 수 없습니다. 그렇게하려고하면 항상 오류가 발생했습니다. 그러나 '$ HOME / .local / share / systemd / user'디렉토리에서 제대로 시작할 수 있습니다. 스크립트를 '/ usr / share / systemd / user /'로 옮긴 후 systemd를 사용하면 문제없이 스크립트를 사용할 수있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.