


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 --usersystemd 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/systemsystemd --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>.timersystemd --user, $USER로 소유 및 실행할 서비스/타이머의 위치
/home/$USER/.config/systemd/user/<SERVICE>.service/home/$USER/.config/systemd/user/<TIMER>.timersystemd --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)