1. 서비스 시작, Unit A가 필요한 자원 체크
2. systemd가 자원 체크용 Unit B 활성화
3. systemd가 자원을 모니터링하고, 다른 입력에 대한 자원 차단 및 버퍼링
4. Unit A를 활성화하고 자원 사용케 한다.
syslog
와 dbus
는 부팅 타임 서비스 유닛이며, 시간이 상당히 오래 걸리고 다른 많은 유닛들이 이 유닛을 의존한다.syslog
, D-Bus
설정 유닛을 보면된다.echo.socket
/etc/systemd/system/echo.socket
active
시키고, Port 22222에 대한 접속이 오면, echo@x.service 인스턴스들이 만들어진다.[Socket]
섹션의 Accept=yes
때문에, 서비스 유닛은 반드시 다수의 인스턴스를 지원해야한다.runlevel<N>.target
을 활성화 시킨다. /etc/rc<N>.d
의 각 심볼릭 링크에 대하여 systemd는 /etc/init.d
의 스크립트를 확인한다./etc/rc<N>.d
/etc/rc5.d/
의 sym link들. /etc/init.d
에 연결되어 있다./etc/init.d/foo
는 foo.service
가 될 것이다.rc<N>.d
의 이름을 근거로 start
나 stop
을 인수로하여 스크립트를 실행한다.로 분류할 수 있음
pam_systemd
모듈이 systemd --user
인스턴스를 launch$USER: dhyang, PID: 1068, /lib/systemd/systemd --user
systemd user
instance는 User Service를 관리한다.systemd user
instance는 per user target으로 하는 default.target
으로 bring upsystemctl --user
로 manually 컨트롤할 수 있다.주의!!
1. systemd --user
인스턴스는 per-user process이지 per-session 프로세스는 아니다!
2. systemd --user
는 systemd --system
프로세스와 별도의 프로세스이다.
2-1. User unit은 system unit이나 다른 user의 unit을 참조/depend on (X)
.desktop
파일들의 경우 MS에서는 .ini
파일과 유사하다.)[ ]
)로 섹션 이름들을 넣고 각 섹션에 변수와 값(옵션)을 할당하게 되어 있다./usr/lib/systemd/system
의 유닛 파일 /media.mount
를 보면 /media
tmpfs
파일 시스템을 나타낸다.[Unit]
Description=Media Directory
Before=local-fs.target
[Mount]
What=tmpfs
Where=/media
Type=tmpfs
Options=mode=755,nosuid,nodev,noexec
/usr/
lib/systemd/system
/
etc/systemd/system
systemd --system
관련 위치systemd location | description |
---|---|
/usr/ lib/systemd/system | system unit directory. systemd의 전역 설정에 관련된 파일 존재 |
/usr/ lib/systemd/user | 설치된 패키지 소속 Unit |
/ etc/systemd/system | system configure directory. systemd의 지역 설정에 관련 파일 존재 |
/ etc/systemd/user | system administrator에 의해 설치된 system-wide user unit |
/ etc/systemd/system/<service,timer> | 여기에 제작한 service, timer를 둬야 systemd --system이 알아먹음 |
systemd --user
관련 위치systemd location | description |
---|---|
~/.local/share/systemd/user | home direcoty에서 속하여 설치된 패키지 |
~/.config/systemd/user | systemd --user의 Unit |
/etc/systemd/
에 존재한다.systemd | Description | 필수 유무 |
---|---|---|
systemd | init daemon (PID: 1) | O |
systemd-journald | 다른 대몬프로세스들 출력(syslog, 표준 출력, 표준 에러 출력), 로그 저장 대몬 | O |
systemd-logind | 사용자 로그인, 세션 등 관리 대몬 | O |
systemd-udevd | 장치 관리자 대몬 | O |
systemd-networkd | 네트워크 관리 대몬, DHCP 및 Virtual LAN 설정 가능 | X |
systemd-resolved | DNS 해석 대몬 | X |
systemd-timesyncd | NTP로 컴퓨터 시간 동기화 대몬 | X |
systemd-boot | UEFI 부트로더 | X |
systemd --system
, root
로 소유 및 실행할 서비스/타이머 위치
/etc/systemd/system/<SERVICE>.service
/etc/systemd/system/<TIMER>.timer
systemd --user
, $USER
로 소유 및 실행할 서비스/타이머의 위치
/home/$USER/.config/systemd/user/<SERVICE>.service
/home/$USER/.config/systemd/user/<TIMER>.timer
systemd --user
는 ~/.bashrc
같은 환경 변수를 inherit 하지 않는다.systemd --user
인스턴스에 대한 다양한 방법의 환경 변수 셋팅 법이 있다.$HOME/.config/environment.d/
디렉토리에 NAME=VAL
form으로 작성한다. environment.d 참고/etc/systemd/user.conf
파일에 DefaultEnvironment
옵션을 사용한다./etc/systemd/system/user@.service.d/
에 config file(.conf
, e.g local.conf
)을 추가한다.# ====== /etc/systemd/system/user@.service.d/local.conf ====== #
[Service]
Environment="PATH=/usr/lib/ccache/bin:/usr/local/bin:/usr/bin:/bin"
Environment="EDITOR=nano -c"
Environment="BROWSER=firefox"
Environment="NO_AT_BRIDGE=1"
$ systemctl --user set-environment
, $ systemctl --user import-environment
명령$ dbus-update-activation-environment -systemd --all
$ systemctl --user import-environment
과 같은 효과를 가지면서, D-BUS에게도 영향을 미친다.$ systemctl --user show-environment
로 현재 설정된 환경 변수를 볼 수 있다.~/.bash_profile
의 PATH
를 가져와 set한다고 가정하자.~/.bash_profile
에 PATH를 inherit하게 등록하면된다.# ====== ~/.bash_profile ======= #
systemctl --user import-environment PATH
PATH가 import되기 전, 시작한 systemd service에는 영향을 끼치지 않는다!
pam_env.so
를 사용하여 환경변수를 만들 수 있다. Using pam_env 참고systemd --user
는 유저의 첫 로그인 때 시작, user의 last session close 이후 종료된다.lingering
을 specific user에게 enable 하자.# loginctl enable-linger <username>
systemd service는 세션이 아니다!. logind의 외부에서 실행한다. lingering을 사용하여 automatic login 활성화를 하지마라. 이는 세션을 break 시킨다. session-permission 참고
/etc/fstab
에 아직 남아 있다면, 초기 파일 시스템 마운트는 실패하지만 운영에는 심각한 영향을 미치지 않는다.$ systemd-analyze dot
$ systemd-analyze dot 'ssh*' > ssh.svg
$ systemctl-analyze dot 'ssh*' > ssh.svg
Color legend: black = Requires
dark blue = Requisite
dark grey = Wants
red = Conflicts
green = After
$ xdot ./ssh.svg
xdot
($ sudo apt install xdot
)