Проверьте предыдущий шаг в скрипте оболочки через Cron - PullRequest
1 голос
/ 16 декабря 2011

--- файл makebackup.sh

#!/bin/bash
DATE='date'
mysqldump --all-databases | gzip -9 > /backup/temp_db.gz
tar -Pcf /backup/temp_ftp.tar /public_html/
tar -Pcf /backup/temp_backup.tar /home/temp_db.gz /backup/temp_ftp.tar
sleep 60 && /backup/upload.sh $DATE

--- файл upload.sh

#!/usr/bin/expect -f

# connect via scp
spawn scp /backup/temp_backup.tar root@mybackup.com:/home/backup_$argv.tar
#######################
expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "mypassword\r"
}
}
interact

Почему это не работает, я не хочу использовать сон, мне нужно знать, когда закончился последний tar, и выполнить файл upload.sh. Вместо этого он всегда выполняется, как только запускается последний tar-файл.

&& ничего не делает, даже если я удаляю сон 60

1 Ответ

0 голосов
/ 16 декабря 2011

Когда вы говорите «Вместо этого он всегда выполняется, как только запускается последний tar-файл», обычно это означает, что в конце строки стоит «&» ИЛИ Вы уверены, что tar действительно работает? Вы смотрите на старый tar.gz, который был создан раньше? Убедитесь, что это новый tar-файл правильного размера. Редактировать Я не говорю, что вам нужно удалять файлы, просто dbl-проверьте, имеет ли смысл то, что помещается в конечный tar.

Проверяете ли вы размеры входных файлов для вашего окончательного tar cmd? (/home/temp_db.gz /backup/temp_ftp.tar)? Редактировать Под этим я подразумеваю, что несжатый tar-файл (temp_ftp.tar) должен быть немного больше, чем сумма размеров всех файлов, которые он содержит. Если вы знаете, что у вас есть 1 мегабайт файлов, составляющих файл temp_ftp.tar, и размер файла составляет 1,1 мегабайта, это хорошо, если оно составляет 0,5 мегабайта, тогда это плохо. (Также рассмотрите возможность gziping, чтобы сократить время передачи на удаленный хост). Ваш сжатый db-файл, трудно сказать, предположительно, работает, если размер файла составляет около 25 байтов, то это указывает на ошибку при создании файла.

В противном случае то, что вы говорите на самом деле кажется невозможным. Это одна из этих вещей, или что-то еще, запутывает вещи.

Один из способов отладить, сколько времени занимает последний tar, - это обернуть команду в две команды даты, т.е.

date
tar -Pcf /backup/temp_backup.tar /home/temp_db.gz /backup/temp_ftp.tar
rc=$?
date

printf "return code from quick tar was ${rc}\n"

Кроме того, для вашего заголовка «проверка предыдущего шага» я добавил захват кода возврата из tar и вывод значения.

Опять же, чтобы подтвердить то, что вы уже знаете, в сценарии оболочки linux, нет способа (кроме фонового задания с символом '&'), чтобы одна команда начала выполняться до завершения предыдущей.

РЕДАКТИРОВАТЬ владение и права доступа к вашим файлам могут испортить это владение и права доступа к вашим файлам. использовать \

ls -l  /backup/temp_backup.tar /home/temp_db.gz /backup/temp_ftp.tar

, чтобы подтвердить, что ваш userID владеет файлами и что вы можете писать в них. Если хотите, отредактируйте свое сообщение, включив в него эту информацию.


Кроме того, ваш заголовок говорит «cron»: вы захватываете все возможные выходные данные этого сценария, чтобы помочь отладить ситуацию? Включите отладку оболочки с помощью set -vx в верхней части файла makebackup.sh. Добавьте отладочный вывод в ваш tar cmd '-v'.

Захватите вывод cron всего процесса, как

59 23 31 12 * { /path/to/makebackup.sh 2>&1 ; } > /tmp/makebackup.`/bin/date +\%Y\%m\%d.\%H\%M\%S.trace_log 

И убедитесь, что вы не нашли никаких сообщений об ошибках.

(образец Crontab, мин. Ч. День пн (день недели, 0-6 или *), изменение даты / времени в соответствии с потребностями тестирования)


Ваш ожидаемый скрипт использует '\ r', разве вы не хотите '\ n' в среде Unix / linux. Если вы сервер на базе Windows, то вам нужен '\ r \ n'.

Редактировать Работает ли ожидаемый сценарий, доказали ли вы, что файлы копируются, имеют ли они одинаковый размер на сайте резервного копирования, дата изменяется?


Если вы ожидаете, что резервные копии когда-нибудь спасут ваши системы, вам нужно лучше понять, как должен работать весь процесс и работает ли он так, как ожидалось. В зависимости от вашей ситуации и доступности альтернативных компьютеров вам следует запланировать проверку восстановления резервных копий, чтобы убедиться, что они действительно будут работать. Поскольку вы используете -P для сохранения информации о полном пути, вам действительно нужно быть осторожным, чтобы не перезаписать вашу рабочую систему старыми файлами.

Чтобы подвести итог моего совета, перепроверьте все.

Надеюсь, это поможет.

...