서버에있는 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에서 시스템 날짜 및 / 또는 시간을 일종의 변수로 사용할 수있는 방법이 있습니까? 그렇지 않다면, 같은 것을 달성하기위한 당신의 제안은 무엇입니까?
답변
이런 식으로 시도해 볼 수 있습니다 (아래의 glenn jackmann 메모에서와 같이 모든 %
문자 를 이스케이프해야 합니다).
15 11 * * * touch "/tmp/$(date +\%d-\%m-\%Y).sql"
특정 cron이 crontab에서 명령을 스크립트로 실행하는지 또는 날짜를 문자열로 파악한 다음 mysqldump 명령을 실행하는 스크립트를 작성해야하는지 확인하십시오.
이스케이프없이 %
레드햇 엔터프라이즈 리눅스 5.0에, “크론을”(내 생각) 일치를 찾지 못하는 경우에 대해 나에게 오류를주고 유지 )
. 이스케이프 해제 후의 모든 항목 %
이 명령의 표준 입력으로 전송 되기 때문 입니다.
또한 %F
사전에 정렬 할 때 파일 이름을 날짜순으로 만들기 위해 ISO8601 날짜 형식 (yyyy-mm-dd, ) 을 사용하는 것이 좋습니다 .
답변
사용할 수 있어야합니다 date
. 또는 자세한 내용을
입력 하십시오.info date
man date
다음과 같은 것이 귀하에게 적합 할 수 있습니다 (필요에 따라 날짜 형식을 변경하십시오)
yourcommand > filepathandnameprefix$(date +"\%d-\%m-\%Y").extension
답변
이러한 명령 을 제대로 실행하려면 % 를 이스케이프 해야 하며 예상대로 실행됩니다.
참조 : http://www.ducea.com/2008/11/12/using-the-character-in-crontab-entries/
답변
내가 사용한 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 작업을 지시하여 야간 또는 원하는대로 실행하십시오.
답변
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