현재 대부분의 대표적인 linux 배포판에 systemd가 기본 init system으로 채택되었다.
fedora를 시작으로 rhel(centos), debian, ubuntu, opensuse, archlinux, coreos 등등 모두 이제 pid 1는 systemd이다.
좋든 싫든 이제 사실상 표준이다. linux를 사용하기위해선 알아야한다.
이 문서는 systemd에서 자주 사용될만한 부분만 간단히 기술하였다. 자세한 내용이 필요하다면 manpage와
https://www.freedesktop.org/wiki/Software/systemd/를 참고하도록 하자.
## 논란
사실 systemd로 채택되면서 많은 논란이 있었다.
가장 논란은 systemd가 혼자 너무 역할을 한다는데 있다. linux(unix) 기본 철학인 '하나의 프로그램은 하나의 일'만 처리하지 않고, 모두 통합하였다.
예전 linux를 공부할때 `seq`를 이상하게 생각했었다. `seq`는 순차적으로 숫자를 출력하는프로그램이다. `seq 1 10`하면 1부터 10이 순서대로 출력된다. 그뿐이다.
'이게 뭔 대단한 프로그램이라고 모든 리눅스 배포판에 포함되었는가?' 나중에 알게된 이유는 shell script에서 찾을수 있었다.
```sh
for num in`seq 1 10`;do
echo$num
done
```
systemd는 init, pam, rsyslog, udev, cron, at, cgroups, date, locale, hostname 등등을 모두 통합하였다. ([A monster named systemd](https://www.youtube.com/watch?v=bdmv2FQRHWg) 링크 참고)
이러한 통합이 누군가에게 장점이 될수고 있겠으나, 나를 포함한 기존 사용자에게 혼란을 가져다 주었다. upstart때만 하더라도 daemon 관리정도의 문서만 찾아보았는데, systemd는 다르다.
그리고 또 눈에 많이 띄이는 것은 systemd의 핵심 독일 개발자 Lennart Poettering에 대한 얘기이다. pulseaudio 개발자이기도 한데, 커뮤니티와 의사소통 문제(독재적인 성향)으로 문제가 많은듯했다. (https://en.wikipedia.org/wiki/Lennart_Poettering)
## system 확인
pid 1을 확인하였다.
```sh
root 1 0 0 Feb10 ? 00:00:02 /lib/systemd/systemd
```
debian wheezy에서도 systemd를 설치(`apt-get install systemd`)할수 있는데 pid 1이 익숙한 /sbin/init이었다. 확인해보니, systemd로 symlink걸려있었다.
## 종료, 리부팅
systemd에서는 `systemctl`로 system과 service를 관리한다. 시스템을 관련 명령들은 아래와 같다.
* 종료 : `systemctl halt`, `systemctl poweroff`
* 리부팅 : `systemctl reboot`
그럼 기존의 `halt`, `shutdown`, `reboot`, `poweroff`는 없어졌나?
```sh
# ls -al /sbin | grep systemctl
lrwxrwxrwx 1 root root 14 Nov 22 04:00 halt -> /bin/systemctl
* Unit section의 `After` : 기존 sysVinit의 경우 /etc/rc?.d를 순차적으로 실행했으나 systemd는 모든 unit을 동시에 병렬적으로 실행한다.
이때 전후 의존 관계가 있는 경우라면 설정해줄수 있다. 위의 경우 network.target이 실행된 후에, 즉 네트워크가 구동된 뒤에 수행되도록 한다. 비슷한 `Requires`가 있는데 이는 해당 서비스가 실패한다면 실행하지 않지만, `After`는 실패유무와 무관하게 실행된다.
target은 unit들의 group이다.
* Service section : 서비스 실행에 필요한 값들을 설정했다.
* Install section의 `WantedBy` : `systemctl enable`로 unit을 등록할때 위치이다. nginx를 enable로 등록하게 되면 /etc/systemd/system/multi-user.target.wants라는 디렉토리에 unit 파일이 symlink걸린다.