Systemd(System Daemon)란
RHEL 7(CentOS7) 부터 추가되었으며 병럴 처리가 가능하도록 작성된 시스템 및 서비스를 관리하는 역할을 수행합니다.
병렬로 처리하기에 부팅시 이전보다 빠르게 부팅이 이루어집니다. Systemd는 init(SystemVInit) 이라는 데몬을 대체 및 기능이 추가되어 나온 데몬이며 PID 는 init과 동일하게 1이며 부모프로세스가 없어 PPID또한 1 입니다.
Systemd.timer 은 cron과 유사하지만 cron보다 가독성이 좋고 직관적이며 부가적인 옵션을 설정할 수 있다는 장점이 있습니다.
또한 cron과 달리 서비스화를 통해 linux가 동작하는동안 cron이 중지되는것을 방지할 수 있습니다.
Systemd.timer를 이용하기 위해서는 사용할 .service 파일과 .timer 타이머가 필요하며 timer로 작동시키려는 service파일명은 같아야 합니다.
1. 명령어 실행 시간을 기록하는 date명령어를 실행하는 test 스크립트 생성
# vi /root/test.sh
#!/bin/bash echo “Systemd timer test $(date)” >> /root/test.log
2. 명령이나 스크립트를 실행하는 서비스 생성
# vi /etc/systemd/system/test.service
[Unit]
Description=test service
[Service]
Type=simple
WorkingDirectory=/root
ExecStart=/root/test.sh
[Install]
WantedBy=multi–user.target
** 옵션별 간략한 설명
[Unit] 섹션
Description : 파일에 대한 주석 (systemctl status 서비스명.service 조회시 같이 출력)
[Service] 섹션
Type : default값은 smimple 이며 ExecStart에 명시된 프로세스 작동시킵니다. 단, 명시된 프로세스가 정상적으로 구동되지 않았어도 완료되었다고 판단합니다.
WorkingDirectory : 프로세스의 작업 디렉터리이며 등록된 서비스를 해당 디렉터리에서 실행합니다.
ExecStart : 실행할 스크립트나 명령, 바이너리가 위치한 절대경로를 지정합니다.
[Install] 섹션
WantedBy : Unit이 어떻게 활성화 될것인지에 대해 선언하는 부분이며 Unit을 enable시킬때 필요한 유닛을 지정합니다.
3. 서비스 타이머 생성
# vi /etc/systemd/system/test.timer
[Unit]
Description=test timer
[Timer]
OnBootSec=1min
OnCalendar=*–*–* *:*:0/5
Unit=test.service
[Install]
WantedBy=multi–user.target
** 옵션별 간략한 설명
[Timer] 섹션
OnBootSec : 시작점을 기점으로 타이머 정의가 가능하며 Cron에서는 존재하지 않던 기능입니다. 3min을 설정시 부팅 후 1분뒤 타이머가 동작합니다. 위와 같은 타이머 형식을 Monotonic 라고 부릅니다.
OnCalendar : [“요일”] “년”–“월”–“일”–“시”:“분”:“초” [timezone] 형식으로 작성합니다. 불필요한 부분은 제외해도 작동합니다. 사전에 정의된 날짜형식인 minutely, hourly, daily, monthly, weekly, yearly quarterly, semiannually 등의 형식을 사용 가능합니다. *–*–* *:*:0/5 설정시 약 5초간격으로 timer를 작동합니다.
Unit : 유닛의 경우 service 파일명과 timer 파일명이 동일 할 경우 선언해주지 않아도 작동합니다. 단, service 파일명과 timer파일명이 일치하지 않을경우 반드시 선언해주어야 합니다.
ex) test.service / test1.timer일 경우 Unit=test.service 선언
4. 타이머 시작 및 작동중인 타이머 확인
# systemctl —now enable test.timer
# systemctl list–timers
# systemctl list–timers test.timer