![cron 스크립트에서 시스템 날짜/시간 사용](https://linux55.com/image/16209/cron%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EB%82%A0%EC%A7%9C%2F%EC%8B%9C%EA%B0%84%20%EC%82%AC%EC%9A%A9.png)
서버에서 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에서 시스템 날짜 및/또는 시간을 일종의 변수로 사용할 수 있는 방법이 있습니까? 그렇지 않다면, 동일한 결과를 얻기 위해 어떤 제안을 해야 합니까?
답변1
다음과 같이 시도해 볼 수 있습니다(아래 Glenn Jackman이 말했듯이 모든 문자를 이스케이프해야 합니다 %
).
15 11 * * * touch "/tmp/$(date +\%d-\%m-\%Y).sql"
특정 cron이 crontab의 스크립트로 명령을 실행하는지, 또는 날짜를 문자열로 계산한 다음 mysqldump 명령을 실행하는 스크립트를 작성해야 하는지 확인하세요.
탈출하지 않고 %
Redhat Enterprise Linux 5.0의 "cron"은 (제 생각에는) 일치하는 항목을 찾을 수 없다는 오류를 계속 표시합니다 )
. 이는 이스케이프되지 않은 모든 항목이 %
명령의 표준 입력으로 전송되기 때문입니다.
%F
또한 파일 이름을 어휘순으로 정렬할 때 날짜별로 정렬하려면 ISO8601 날짜 형식(예: yyyy-mm-dd, 즉 )을 사용하는 것이 좋습니다 .
답변2
를 사용하여 세부정보를 입력 하거나 가져올 수 있어야 합니다 date
.info date
man date
다음과 같은 방법이 도움이 될 수 있습니다(필요에 맞게 날짜 형식을 변경하세요).
yourcommand > filepathandnameprefix$(date +"\%d-\%m-\%Y").extension
답변3
이와 같은 명령을 올바르게 실행하려면 다음을 수행해야 합니다.탈출하다%그러면 예상대로 실행됩니다.
바라보다:http://www.ducea.com/2008/11/12/using-the-character-in-crontab-entries/
답변4
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