corntab을 이용하여 루틴한 작업을 돌리고있었는데
systemd로 옮겨야하는 상황이 왔다. (단순히 php파일 하나 실행하면되는 거라 안 옮겨도 되지만 어쨌든 옮기게됬다)
검색을해서 보니 서비스를 만들어서 해당 서비스를 스타트 시키면 된다고 하여 일단 서비스 파일을 만들었다.
/etc/systemd/system 위치에 일단 service_name.service 라는 파일을 만들고
실행할 내용을 기입했다.
/etc/systemd/system/service_name.service
[Unit]
Description=aws check...haha
[Service]
Type=simple
WorkingDirectory=/var/www/html/tmp.test.com/Model/testAPI
ExecStart=/usr/bin/php /var/www/html/tmp.test.com/Model/testAPI/billing.php
[Install]
WantedBy=default.target
만들고 보니 crontab의 * * * * * 처럼 몇일날 어느시에 실행하는 기능이 없었다..
Restart=always
RestartSec=3600
위와 같은 실행이 끝나고 몇초뒤에 재실행할 것인지를 설정하는 기능은 있었지만
service자체 내에서는 [특정 날 ,특정 시 에 실행하겠다] 라는 설정을 할 수 없었다.
방법을 찾아보니 service가 아닌 timer라는 unit이 있었다.
이 timer를 이용하면 crontab과 같은 기능을 수행할 수 있었다.
우선 같은 경로에 service_name_timer.timer 라고 파일을 만들고 내용을 작성하였다.
/etc/systemd/system/service_name_timer.timer
[Unit]
Description=smi aws billing timer (AM: 08:00)
[Timer]
OnCalendar=*-*-* 23:00:01
Persistent=True
Unit=service_name.service
[Install]
WantedBy=default.target
[Timer]의 Oncalendar에 실행시킬 time을 형식에 맞게 입력해주고
Unit에 실행시킬 서비스를 입력해주면 된다. (기타 다른 옵션은 따로 검색해보세요)
나같은 경우는 매년 매월 매일 am 8시에 해당 서비스를 돌리고 실행시키고 싶었는데
*-*-* 은 년,월,일 이고 23:00:01은 시분초 이다. (나같은 경우는 서버시간이 utc 0이라 시간에서 9를 뺐다)
ex)----------------------------------------
매일 매시 5분에 돌리고싶다~~ === *:05:00
매년 3월 1일 11시에 돌리고 싶당 === *-03-01 11:00:00
--------------------------------------------
이런식으로 작성해 주면된다.
작성을 하고 저장한다음에
sudo systemctl enable service_name_timer.timer
하여 부팅시 실행되게 해놓은다음
sudo systemctl start service_name_timer.timer
를 하면 타이머가 시작되면서 설정한 시간에 Unit에 설정해놓은 .service를 실행해주게 된다.
timer가 잘 등록이 되었는지, 언제실행되었는지, 언제 실행될건지를 보려면
systemctl list-timers
를 이용하면되고
서비스가 정상적으로 실행되었는지 로그를 보고싶다면
journalctl -r -u service_name.service
이렇게 journalctl를 이용해 로그를 확인을 해주면된다.
'공부 > Server' 카테고리의 다른 글
apt과 apt-get 차이 (0) | 2018.10.06 |
---|---|
/bin/rm: cannot execute [Argument list too long] (3) | 2018.07.15 |
(tomcat) 한글이 깨질 때 server.xml 설정 (0) | 2015.12.10 |
(개발환경) Eclipse + Spring 연동 (0) | 2015.10.06 |
(php) 우분투 환경에 APM 세팅 (0) | 2015.09.30 |