본문 바로가기

Linux/systemd

systemd 사용자 유닛 만들기

앞으로 티스토리 대신 blog.stackframe.dev에서 블로깅을 합니다. 이 블로그는 남겨 둘 예정입니다.

systemd에서는 사용자만의 유닛을 만들고 로그인 시 자동으로 실행하도록 설정할 수 있습니다. 이것으로 개별 사용자의 입맛대로 시작 프로그램을 등록할 수 있고, .timer나 resource control 등의 systemd 기능들을 사용할 수 있습니다.


먼저 사용자의 systemd 유닛 파일이 존재하는 디렉토리는 계정의 홈 디렉토리 아래의 .config/systemd/user/ 입니다. 사용자가 어떤 유닛을 만들어서 사용하고 싶다면 이 디렉토리에 저장되어 있어야 합니다.


예시로 chromium을 관리하는 서비스를 만들려면 아래와 같이 하면 됩니다.

[Unit]
Description=Chromium service

[Service]
ExecStart=/usr/bin/chromium

이 내용을 ~/.config/systemd/user/chromium.service 에 저장하는 것으로 사용자만의 chromium.service 유닛을 만들 수 있습니다.


사용자 유닛 또한 systemd에서 유닛을 제어하기 위해 사용하는 명령어인 systemctl 을 사용합니다. 다만 systemctl은 기본적으로 시스템 유닛에 대해 작동하므로 --user 옵션을 넣어줘야 합니다.

$ systemctl --user status chromium.service

위의 명령을 실행하면 방금 만든 chromium 서비스 유닛의 상태를 볼 수 있습니다.

아직 실행하지 않았으므로 inactive 상태인 것을 볼 수 있습니다. 이 서비스를 실행하려면 아래와 같이 명령을 실행하면 됩니다.

$ systemctl --user start chromium

systemctl --user status chromium으로 확인해보면 현재 실행중인 것을 볼 수 있습니다.

종료하고 싶다면 그냥 x를 누르거나 systemctl 명령에서 start를 stop으로 바꿔서 실행하면 됩니다.

$ systemctl --user stop chromium

추가적으로 로그인 시 자동으로 실행되도록 하고싶다면 유닛에 아래의 코드를 추가하시면 됩니다. systemd의 특수 유닛인 default.target은 보통 graphical.target으로 심볼릭 링크되어 있는데, 이것에 WantedBy 옵션을 거는 것으로 graphical.target이 실행될 때 같이 실행하겠다는 의미입니다.

[Install]
WantedBy=default.target