Cron 스크립트에서 시스템 날짜 / 시간 사용


37

서버에있는 MySQL 데이터베이스를 백업 할 Cronjob을 설정하고 있지만 동일한 파일을 계속 반복해서 덮어 쓰고 싶지 않습니다. 대신, 자동으로 수행되는 백업 배열을 원합니다. 예를 들면 다음과 같습니다.

## Cronjob, run May 21st, 2011:
mysqldump -u username -ppasword database > /path/to/file/21-03-2011.sql

## SAME Conjob, run May 28th, 2011:
mysqldump -u username -ppasword database > /path/to/file/28-03-2011.sql

등등.

Cronjob에서 시스템 날짜 및 / 또는 시간을 일종의 변수로 사용할 수있는 방법이 있습니까? 그렇지 않다면, 같은 것을 달성하기위한 당신의 제안은 무엇입니까?

답변:


45

이런 식으로 시도해 볼 수 있습니다 (아래의 glenn jackmann 메모에서와 같이 모든 %문자 를 이스케이프해야 합니다).

15 11 * * * touch "/tmp/$(date +\%d-\%m-\%Y).sql"

특정 cron이 crontab에서 명령을 스크립트로 실행하는지 또는 날짜를 문자열로 파악한 다음 mysqldump 명령을 실행하는 스크립트를 작성해야하는지 확인하십시오.

이스케이프없이 %레드햇 엔터프라이즈 리눅스 5.0에, "크론을"(내 생각) 일치를 찾지 못하는 경우에 대해 나에게 오류를주고 유지 ). 이스케이프 해제 후의 모든 항목 %이 명령의 표준 입력으로 전송 되기 때문 입니다.

또한 %F사전에 정렬 할 때 파일 이름을 날짜순으로 만들기 위해 ISO8601 날짜 형식 (yyyy-mm-dd, ) 을 사용하는 것이 좋습니다 .


23
datecronfile 내부에서 주의해야합니다 . 일부 크론 (모두?) %은 명령의 끝으로 취급 됩니다. (그래서 $()문제는 아니 었습니다). : 당신은 모든 퍼센트 기호 탈출해야 ... touch "/tmp/$(date +\%Y-\%m-\%d)"(종류는 전적으로하는 날짜 형식을 사용하기 좋네요을)
글렌 잭맨

2
glenn jackman이 정확합니다. 위의 crontab 항목에서 '%'문자를 이스케이프 처리하면됩니다. RHEL 5.0 crontab 항목은 다음과 같습니다. 50 11 * * * touch "/tmp/backup.$(date + \ % Y-\ % m-\ % d) .sql"
Bruce Ediger

서브 쉘 사용은 환경 변수에서 작동하지 않습니다. 그래서, DATE=$( date -I )다음 사용하여 ${DATE}문자 그대로 사용하여 결과를 나중에 $( date -I )작업의 명령 줄에서합니다.
Christopher Schultz

1
%OpenSuse 42에서도 이스케이프 처리 가 필요한 것 같습니다 .
kgadek

7

사용할 수 있어야합니다 date. 또는 자세한 내용을
입력 하십시오.info dateman date

다음과 같은 것이 귀하에게 적합 할 수 있습니다 (필요에 따라 날짜 형식을 변경하십시오)

yourcommand > filepathandnameprefix$(date +"\%d-\%m-\%Y").extension

다시 %cron 내부의 모든 문자 를 피하십시오 .
glenn jackman

@glenn : 죄송합니다. 사전 순서에 관해서는 방금 OP의 날짜 형식과 일치했습니다. 나는 당신처럼 ISO 형식을 개인적으로 좋아합니다.
asoundmove


1

내가 사용한 bash 스크립트는 다음과 같습니다.

#!/bin/bash
mysqldump -u user1 -p DatabaseName | gzip > BackupFolder/backup`date +%F_%T`.sql.gz

파일은 다음과 같습니다

backup2011-03-02_15:16:46.sql.gz

cron 작업을 지시하여 야간 또는 원하는대로 실행하십시오.


이것은 매력처럼 작동합니다. 비록 여기서 무슨 일이 일어나고 있는지 잘 모르겠습니다. 백틱은 다른 프로그램이나 다른 것의 출력을 포함 할 수 있습니까? 서식은 어떻습니까 (예 : + % F 등)?
AeroCross

1
그러나 백틱은 출력이 명령 자체로 대체되는 명령 대체를 수행합니다. 참조 3.4.5 다음은보다 포괄적 인 데이터에 대한 수정의 목록입니다 링크

오, 정말 놀라운 자료입니다. 항상 배우는 것이 좋습니다. 링크 주셔서 대단히 감사합니다!
AeroCross

0

date명령 을 사용하고 백업 명령을 호출 하는 작은 랩퍼 스크립트를 작성 하십시오.

#!/bin/bash
NOW=`/bin/date +"%m%d%Y-%H%M%S"`
if [[ "$?" != "0" ]]; then
 NOW="UNKNOWN_DATE"
 fi
mysqldump -u username -ppassword database > /path/to/file/$NOW.sql
if [[ "$?" != "0" ]]; then
 echo "$0: backup failed with error code $?"
 fi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.