BLOG ARTICLE 시간 | 2 ARTICLE FOUND

  1. 2014.01.28 [Linux] 클론탭(crontab) 기본 개념
  2. 2014.01.28 [Java] 자바 시간, 날짜 계산 (2)

 

Crontab 이란

 

 crontab은 스케줄링을 관리하는 프로그램으로 시스템 관리자에게 중요한 유틸 중 하나이다. 특정 시간대에 사용자가 작성한 스트립트나 명령을 실행 할 수 있다. 이는 rsync 같은 툴을 같이 사용하여 굉장히 편리한 백업 시스템을 만들 수도 있고 데이터 베이스관리나 기타 반복적인 업무를 간편하게 등록하여 사용 할 수 있다.

MIN HOUR DOM MON DOW CMD

필드 명세 허용 값
MIN 0~59
HOUR 시간 0~23
DOM 날짜 1-31
MON 1-12
DOW 0-6
CMD 명령어 실행 가능 한 모든 명령어

1. 다음 시간 6월 10일 오전 8시 30분 을 cron 명령어에 맞게 작성해보자.

30 08 10 06 * /home/script/backup
  • 30: 30분
  • 08: 오전 8시 <24시제>
  • 10: 10일
  • 06: 6월
  • *: 매주

2. 매일 하루 두 번 증분 백업을 하자.

00 11,16 * * * /home/script/incremental-backup
  • 00: 0분 (정각)
  • 11,16 - 오전 11시 / 오후 4시
  • *: 매일
  • *: 매달
  • *: 매주

3. 특정 시간대에 작업하기

00 09-18 ** 1-5 /home/check-db-status
  • 00: 0분 (정각)
  • 09-18: 오전 9, 10, 11, 12시 / 오후 1, 2, 3, 4, 5, 6시 마다 작업
  • *: 매일
  • *: 매달
  • 1-5: 월, 화, 수, 목, 금 (주중)

4. crontab 작업 목록 보기 (명령어)

$ crontab -l
@hourly /home/script/hourly-script
00 09-18 ** 1-5 /home/check-db-status

$ crontab -u foo -l
no crontab for foo

$ su
# crontab -l
no crontab for root

 

5. crontab 목록 수정

목록 수정을 vi/vim으로 편집하려면 변수를 선언해줘야 한다. export VISUAL=vim

$ crontab -e
$ crontab -u foo -e

6. 매분마다 작업하기

* * * * * CMD

7. 10분 마다 작업하기

*/10 * * * * /home/script/check-disk-space
0-10/2 * * * * /home/script/check-db-updates-5times
  • */10의 뜻은 10분 마다
  • 0-10/2의 뜻은 처음 10분 동안 2분 간격으로

8. 키워드 사용

Keyword

키워드 대치 문법
@yearly 0 0 1 1 *
@daily 0 0 * * *
@hourly 0 * * * *
@weekly 0 0 * * 0
@reboot 시스템 시작 시

다음은 키워드를 사용해 매일 반복하는 작업 스케줄링 crontab이다.

@daily /home/script/make-log

9. 메일 사용

crontab 수정시 MAILTO를 선언하면 실행 내용을 메일로 받을 수 있다.

MAILTO="xajax@naver.com"

10. 파일을 통한 crontab 설정

파일로 저장해 놓고 다른 시스템에 재 사용 하고 싶다면 다음과 같이 하면 된다.

$ crontab cron-file.txt
$ crontab -l
AND

 

 

날짜 시간 계산 예제

 

 

import java.util.*;
import java.text.*;
public class StringToDate {
public static void main(String[] args) {
try { String str_date="2010-07-09T12:50:58";
DateFormat formatter ; 
Date date ;
formatter = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss");
date = (Date)formatter.parse(str_date);
System.out.println("Today is " +date );
} catch (ParseException e)
{System.out.println("Exception :"+e); }
}
}

 

 

 

Java에서 내가 알고 있는 시간과 관련된 클래스는 다음의 세가지가 있다.


Calendar

날짜와 요일 관련하여 유용한 기능들을 가진 클래스이다. 달력을 그리거나, 오늘이 한달중에서 몇번째 주이고 몇번째 요일인지 계산하는 기능들을 가지고 있다. 단, 시간 정확도는 분까지만 보장한다. 날짜 수준까지만 사용하는 것을 권장한다.


Date

날짜를 구하는 클래스이다. API문서에는 milisecond 수준까지 정확도를 보장한다고 되어 있다. 하지만 메소드중 많은 메소드가 deprecated(권장하지 않음)이기 때문에, 날짜 계산이 필요할 경우에는 Calendar클래스의 add(int, int)를 사용하고, millisecond 단위로 계산할때는 System.getCurrentTimemilis()를 권장한다.


System.getCurrentTimemilis()

국제표준시각(UTC, GMT) 1970/1/1/0/0/0 으로부터 경과한 시각을 밀리초 단위까지 계산하여 long 값으로 반환한다. 주로 정확한 시간 계산이 필요한 경우에 해당 메서드를 주로 사용한다. 필요한 경우 Date클래스나 Calendar 클래스로 변환하여 사용할 수 있다.

 

아래는 Calendar 클래스의 사용법이다.

 

//현재 날짜를 받아옴. 

Calendar t = Calendar.getInstance();

//오늘날짜의 해당연도를 구함

String year = Integer.toString(t.get(Calendar.YEAR));

//오늘날짜의 해당 월을 구함. 1월은 0이기 때문에 + 1

String month = Integer.toString((t.get(Calendar.MONTH) + 1));

//한자리 숫자, 예를 들면 1월인 경우 "01"등으로 문자열 변환

month = month.length() > 1 ? month : "0" + month;

//오늘의 날짜 구함

String day = Integer.toString(t.get(Calendar.DAY_OF_MONTH));

day = day.length() > 1 ? day : "0" + day;

//현재 시각의 시를 구함.

String hh = Integer.toString(t.get(Calendar.HOUR_OF_DAY));

//현재 시각의 분을 구함.

String mm = Integer.toString(t.get(Calendar.MINUTE));

//오늘의 요일을 구함

String WeekDay = Integer.toString(t.get(Calendar.DAY_OF_WEEK));

//오늘이 1~5번째 주중 몇번째 주인지 구함. 

String WeekOfMonth = Integer.toString(t.get(Calendar.WEEK_OF_MONTH);

//오늘을 기준으로 3주전 날짜로 수정



t.add(Calendar.WEEK_OF_MONTH, -3);

 

 

 

 

아래는 Date 클래스의 사용법이다.

 

 

//현재 시각 가져오기.

Date today = new Date (); 

//출력

System.out.println ( today );

//시작일. 여기서는 샘플로 24시간 전의 시각을 지정.

Date startDay = new Date(System.currentTimeMillis() - 1000*60*60*24);

//종료일. 여기서는 샘플로 24시간 후의 시각을 지정.

Date endDay = new Date(System.currentTimeMillis() - 1000*60*60*24);

//해당 기간 조회

if(startDate.before(today) && endDate.after(today))

{

 System.out.pringln("지정하신 날짜는 해당 기간내에 존재합니다.");

}

 


 

출처: http://blog.naver.com/vlueguy7/70096153885

AND