Systemd Unit
- Unit 은 Systemd 에서 관리하는 background process 를 말한다.
- 즉, 어떤 일을 background 로 daemon 화 하여 계속 돌리고 싶을 때 이 기능을 사용하면 된다 이마리야.
- 가장 대표적인 예시가 SSH 이다. SSH 는 client-server model 로 작동하는데, 많은 사람들이 간단하게 22번 port 로 서버에 SSH 로 접속할 수 있는 것은 이 서버에서 SSH process 가 systemd 에 의해 background 로 돌고 있기 때문이다.
- 그럼 내가 원하는 작업을 간단하게 Systemd Unit 으로 등록하는 방법에 대해 예시로 알아보자.
예시 Script
- 아래의 script 는 1초마다 현재 시간을 출력하는 간단한 shell script 이다.
- 이놈을
timerd
라는 파일 이름으로 저장하자.
timerd
#!/bin/bash
while true; do
echo "Current time: $(date)"
sleep 1
done
- 그리고 이놈에게 실행권한을 준다.
chmod +x timerd
- 그리고 이놈을
$PATH
에 포함된 디렉토리 중 하나인/usr/local/bin/
로 옮겨주자.
sudo mv timerd /usr/local/bin/
- 한번 실행해보면 다음과 같이 작동하는 것을 알 수 있다.
timerd
Unit 파일 작성
- 이 실행파일을 Systemd unit 으로 만들기 위해서는 Unit 파일을 작성해야 한다.
- 다음과 같이 적어준 다음
timerd.service
로 저장해준다.
timerd.service
[Unit]
Description=Timerd Service
[Service]
Type=simple
ExecStart=/usr/local/bin/timerd
Restart=always
[Install]
WantedBy=multi-user.target
- 그리고 이 파일을
/etc/systemd/system
으로 옮겨준다.
sudo mv timerd.service /etc/systemd/system/
Unit 실행
- Systemd 에 대한 control 명령어인
systemctl
을 사용해서 이 unit 을 관리할 수 있다. - 다음의
start
명령어로 unit 을 실행할 수 있다.
sudo systemctl start timerd.service
- 만약 부팅시에 자동으로 실행되게 하고 싶으면,
enable
명령어를 사용하면 된다.- 이 명령어는 unit 을 실행시키지는 않는다. 그래서 부팅시에 자동으로 실행되게 등록하는 것과 지금 당장 실행하는 것을 모두 하고싶으면
--now
옵션을 사용하면 된다.
- 이 명령어는 unit 을 실행시키지는 않는다. 그래서 부팅시에 자동으로 실행되게 등록하는 것과 지금 당장 실행하는 것을 모두 하고싶으면
sudo systemctl enable --now timerd.service
- 그리고
status
로 현재 상태를 볼 수 있다.active (running)
상태면 작동중인거다.
sudo systemctl status timerd.service
- 이놈이 표준출력으로 내보낸 메세지는 자동으로 로깅된다. 이 로그를 확인하고 싶으면 systemd 의 로깅 서비스인 journald 를 사용하면 된다.
sudo journalctl -xeu timerd.service
- 이놈을 멈추고 싶으면
stop
을 사용하면 된다.
sudo systemctl stop timerd.service
- 이때의
status
는 다음과 같이 출력된다.