Les travaux suivants:
/usr/bin/mysqldump -u[username] -p[password] --all-databases --single-transaction > /home/[domain]/public_html/backups/full_backup_`date -I`.sql
5 Réponses :
Utiliser édité fort> P> Pour éviter les sujets longs dans des courriels de cron, utilisez Créer un fichier date +% y-% m-% d_% h-% m-% s code> (ou tout autre format): / home / [cron parameters] /home/<your user>/mycron.sh
Salut j'utilise cpanel x et j'ai été envoyé par courrier électronique: / bin / sh: -c: ligne 0: EOF inattendu lors de la recherche de "` "/ bin / sh: -C: ligne 1: erreur de syntaxe: extrémité inattendue de déposer
Dans mon précédent poste, vous voudrez peut-être supprimer les nouvelles lignes et les backslashes `\`. Je les ai bien placés ici pour la lisibilité du forum. Je suis édité.
Oui, j'ai enlevé les backslashes. BTW dans la ligne d'objet de l'e-mail, cela m'envoie qu'il a initialement dit "... / public_html / sauvegarde / FULL_BACKUP_ date -i code> .sql" mais maintenant "... / public_html / sauvegarde / FULL_BACKUP_`DATE + "
Voir mon édition. Le sujet de l'email ne sera pas interprété. Vous pouvez utiliser un script pour que le sujet soit plus court (seul le chemin du script) au lieu de la commande complète
Mon point n'est pas qu'il y a un problème avec le sujet du courrier électronique. La chose est que date -i code> fonctionne et tout autre format type de date donne des erreurs. (Je n'ai reçu qu'un email quand il y a une sorte d'erreur - pour -i il n'y a généralement pas d'erreur et il crée le fichier SQL) Le manuel de commande de date indiqué par HD1 mentionné par -i ... je pense La solution est celle qui reconnaît l'option -i mais inclut également d'autres options.
OK je vois. Ouais, l'option -i n'est pas dans le manuel ( Stackoverflow. com / questions / 9650041 / ... ). Vous voudrez peut-être toujours utiliser un script et l'appeler par /foo/bar/mycron.sh `date -i` code> et ignorer l'option est le script: D
La commande date (1) a une option "+ [format]". Je pense que l'option que vous souhaitez est soit les options '% s' ou '% n', qui vous donneront des secondes ou des nanosecondes respectivement. De votre chemin pour MySQL, je vais supposer que vous êtes sous Linux. Si tel est effectivement le cas, vous pouvez trouver le Manpage ici qui vous donnera plus de détails . P>
J'utilise cPanel X .... entre l'option de date actuelle est -i ... Je n'arrive pas à voir cette option sur cette page man.
date -minutes code> pourrait être le moyen d'aller, qui utilise le format ISO 8601.
Le page wiki a quelques informations. P>
J'ai un travail de cron courir deux fois par jour et jusqu'à présent, il a ajouté: "FULL_BACKUP_2012-11-14T00: 00-0600.SQL" Je vais simplement vérifier que cela continue de travailler ...
Bien que mon script d'origine fonctionne, quelque chose comme ceci peut être beaucoup plus simple:
#!/bin/bash
###########################################################################
# snapshot
#
# Rotates snapshots of backups using hard links
#
# Keeps track of:
# - 48 hours of snapshots (48*60/interval)
# - 60 days worth of midnight snapshots
# - 24 months of snapshots from the 1st
# Ussage:
# snapshot /path/to/backup.sql.gz
# mysqldump ... | gzip -c | snapshot /path/to/backup.sql.gz
#
###########################################################################
if ! hash date 2> /dev/null; then
echo "-snapshot: date command not found" 1>&2
exit 1
fi
if ! hash ln 2> /dev/null; then
echo "-snapshot: ln: command not found" 1>&2
exit 1
fi
# Date Info
month=$(date +"%b")
day=$(date +"%d")
year=$(date +"%Y")
time=$(date +"%H_%M")
date=$(date +"%d%b%Y")
dateFirst=$(date --date="$month 01" +"%d%b%Y" 2> /dev/null)
# Test to see if we're using GNU date or BSD date
if [ "$dateFirst" == "" ]; then
dateFirst=$(date -v1d +"%d%b%Y")
back2date=$(date -v-2d +"%d%b%Y")
back2monthY=$(date -v-2m +"%b%Y")
back2year=$(date -v-2y +"%Y")
else
back2date=$(date --date="-2 day" +"%d%b%Y")
back2monthY=$(date --date="-2 month" +"%b%Y")
back2year=$(date --date="-2 year" +"%Y")
fi
if [ "$dateFirst" == "" ]; then
echo "-snapshot: Unknown version of date command." 1>&2
exit 1
fi
# Directories
filepath=$1
backup=$2
if [ "$filepath" == "" ]; then
echo "-snapshot: Expecting filename as first argument" 1>&2
exit 1
fi
if [ "$backup" == "" ]; then
backup=/backup
fi
if [ ! -d "$backup" ]; then
echo "-snapshot: Directory "$backup" doesn't exist" 1>&2
exit 1
fi
snapshots=$backup/snapshots
daily=$backup/daily
monthly=$backup/monthly
basename=${filepath##*/}
ext=${basename#*.}
basename=${basename%%.*}
filename=$basename-$date-$time.$ext
##############################
# Make new snapshot
##############################
if [ ! -d "$snapshots/$date" ]; then
mkdir -p "$snapshots/$date"
fi
if [ -t 0 ]; then
if [ ! -f "$filepath" ]; then
echo "-snapshot: '$filepath' doesn't exist" 1>&2
exit 1
fi
ln "$filepath" "$snapshots/$date/$filename"
else
cat > "$snapshots/$date/$filename"
fi
##############################
# Daily/monthly snapshots
##############################
if [ "$time" == "00_00" ]; then
if [ ! -d "$daily/$month$year" ]; then
mkdir -p "$daily/$month$year"
fi
ln "$snapshots/$date/$filename" "$daily/$month$year/$filename"
if [ "$day" == "01" ]; then
if [ ! -d "$monthly/$year" ]; then
mkdir -p "$monthly/$year"
fi
ln "$snapshots/$date/$filename" "$monthly/$year/$filename"
fi
fi
##############################
# Clean up old snapshots
##############################
if [ -d "$snapshots/$back2date" ]; then
rm -fr "$snapshots/$back2date"
fi
if [ -d "$daily/$back2monthY" ]; then
rm -fr "$daily/$back2monthY"
fi
if [ -d "$monthly/$back2year" ]; then
rm -fr "$monthly/$back2year"
fi
Si vous voulez tout faire dans l'entrée CRONTAB (et non un script shell), voici comment:
/usr/bin/mysqldump -u[username] -p[password] --all-databases --single-transaction > /home/[domain]/public_html/backups/full_backup_`date +\%F_\%R`.sql
Je ne sais pas pourquoi cette question était fermée. Cela semble être une excellente question.