it-swarm-eu.dev

Používání systémového data / času v skriptu Cron

Zřídím Cronjob, který bude zálohovat databázi MySQL, kterou mám na serveru, ale nechci, aby neustále přepisoval stejný soubor znovu a znovu. Místo toho chci mít řadu záloh, ze kterých si můžete vybrat, a to automaticky. Například:

## 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

A tak dále.

Existuje nějaký způsob, jak mohu použít systémové datum a/nebo čas jako nějakou proměnnou v mém Cronjob? Pokud ne, jaké jsou vaše návrhy, jak toho dosáhnout?

38
AeroCross

Můžete zkusit něco takového (jak poznamenává glenn jackmann níže, musíte uniknout všem % znaky):

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

Chcete-li zjistit, zda váš konkrétní cron spustí příkaz z crontab jako skript sám o sobě, nebo pokud potřebujete napsat skript, který uvádí datum jako řetězec, a pak spustí příkaz mysqldump.

Bez útěku %, „cron“ na Redhat Enterprise Linux 5.0 (myslím) mi stále dával chyby, když nenašel odpovídající ). Je to proto, že vše po neuzavřeném % je poslán na standardní vstup příkazu.

Také bych doporučil použít formát data ISO8601 (rrrr-mm-dd, což je %F) pro seřazení názvů souborů podle data při lexikálním třídění.

46
Bruce Ediger

Měli byste být schopni používat date.
Zadejte info date nebo man date pro detaily.

Může se vám hodit něco jako následující (změňte formát data podle svých potřeb)

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

Aby byl takový příkaz řádně spuštěn, musíme uniknout% a pak bude běžet podle očekávání.

Viz: http://www.ducea.com/2008/11/12/using-the-character-in-crontab-entries/

4
Édouard Lopez

Zde je bash skript, který jsem použil:

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

Soubory vypadají takto:

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

Zaměřte cron práci na to, aby běžela v noci nebo cokoli, co preferujete.

1
user5319

Napište malý skriptový skript, který používá příkaz date a zavolá váš záložní příkaz.

#!/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
0
LawrenceC