문서의 이전 판입니다!
systemd
로 서비스/대몬 설정을 다룬다./etc/systemd/system
/run/systemd/system
/usr/local/lib/systemd/system
/usr/lib/systemd/system
# 지금 시작 systemctl start unit # 종료 systemctl stop unit # 재시작 systemctl restart unit # booting 시 시작하게 설정 systemctl enable unit # booting 시 시작하게 하면서, 지금 당장도 실행하게 systemctl enable --now unit
NAME=value
형태만 된다./etc/environment.d/*.conf
, ~/.config/environment.d/*.conf
파일에 환경변수를 NAME=VALUE
형태로 지정한다.# 예시 /etc/environment.d/60-foo.conf: FOO_DEBUG=force-software-gl,log-verbose PATH=/opt/foo/bin:$PATH LD_LIBRARY_PATH=/opt/foo/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} XDG_DATA_DIRS=/opt/foo/share:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share/}
sudo apt install systemd-bootchart systemd-analyze systemd-analyze blame
init=/lib/systemd/systemd-bootchart
넣고 부팅하면 /run/log/bootchart-날짜-번호.svg
파일이 생성되고 이 이미지를 보고 부팅 성능 병목 지점을 찾을 수 있다.shutdown
/ 종료 등이 너무 느릴 때 분석해서 문제가 되는 서비스를 종료처리하거나 각종 타임아웃 설정을 해줘야 한다.journalctl -b -1
은 이전 부팅 로그를 표시하며, 종료 전의 로그를 확인할 수 있다.
<code sh>
sudo journalctl -b -1 > log
</code>
* 위
log 파일을 분석해서
stopping 로그 들 중에
timeout 분석해서 처리한다.
* 내 경우 Linux network-manager
DHCP 관련 timeout 이 발생했다.
<code>
sudo nano /etc/NetworkManager/NetworkManager.conf
[connection]
ipv4.dhcp-timeout=10
ipv6.dhcp-timeout=10
sudo systemctl restart NetworkManager
</code>
==== 일괄로 종료 Timeout 지정 ====
*
/etc/systemd/system.conf <code>
DefaultTimeoutStopSec=10s # 원래 90s 임.
</code>
* 재시작 <code sh>
sudo systemctl daemon-reexec
</code>
===== systemd 는 어떻게 기존 SysVInit 의 /etc/init.d/* 서비스를 인식하는가 =====
* Systemd 로 변경했음에도 기존
SysVInit 이 사용하던
/etc/init.d/* 의 서비스를 systemd 명령으로 사용가능하다.
* How does systemd use /etc/init.d scripts? - Unix & Linux Stack Exchange
* 이는 systemd-sysv-generator 가
/etc/init.d/*의 서비스를 읽어서 동적으로 systemd unit 으로 바꿔주기 때문이다. (
/usr/lib/systemd/system-generators/systemd-sysv-generator)
* systemd unit 은
/run/systemd/generator.late 에
*.service로 동적으로 생성된다.
* systemd 는
init.d를 자동 인식하는게 아니라, systemd unit 이라고 인식하게 되는 것이다.
*
init.d''의 서비스 파일에는 주석으로 LSB Headers라는 값이 들어있어서 systemd 로 변환하는 정보로 사용한다.