Форум русскоязычного сообщества Ubuntu


Автор Тема: Настройка задания резервного копирования через Cron  (Прочитано 918 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн elmuerto

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Доброго времени суток!

Стоит задача резервирования БД firebird и папки с Perl скриптами. Исходя из документации и информации на форуме написал скрипт, который выполняет необходимые операции. При запуске скрипта из консоли вручную, все корректно отрабатывает. При настройке задания в cron скрипт не выполняется, либо выполняется не корректно. Ниже привожу текст скрипта и свои действия.

Все действия выполнял от имени суперпользователя
sudo -s
Версия системы:
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:        14.04
Codename:       trusty

Скрипт резервного копирования:
#!/bin/bash

#Declare variables

cur_date=$(date +%F-%H:%M)
db_output=db-$cur_date.fbk.gz
scr_output=scr-$cur_date.tar.gz

#Backup db

/usr/bin/gbak -b -v -user 'SYSDBA' -pass 'masterkey' "localhost:/media/hdd2/app/db/base.fdb" /dev/stdout | gzip > /media/hdd2/backup/db/$db_output

#Backup scripts folder

tar -czPf /media/hdd2/backup/scripts/$scr_output /media/hdd2/app/scripts

#Copy backup files to shared folfer

cp -f /media/hdd2/backup/db/$db_output /media/netdisk/remote_backup/db
cp -f /media/hdd2/backup/scripts/$scr_output /media/netdisk/remote_backup/scripts

#Delete old files

cd /media/hdd2/backup/db && ls -t | tail -n+8 | xargs -i rm '{}'
cd /media/hdd2/backup/scripts && ls -t | tail -n+8 | xargs -i rm '{}'
cd /media/netdisk/remote_backup/db && ls -t | tail -n+8 | xargs -i rm '{}'
cd /media/netdisk/remote_backup/scripts && ls -t | tail -n+8 | xargs -i rm '{}'

Содержимое crontab (таймер выполнять каждую минуту установлен для проверки):
SHELL=/bin/bash
MAILTO=user
PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin
#
*/1 * * * * /usr/local/sbin/app_backup.sh >> /dev/null 2>$1

Так же пробовал вносить изменения в системный Cron:
#
/etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
*/1 * * * * /usr/local/sbin/app_backup.sh >> /dev/null 2>$1

Демон cron запущен:
ps -ef | grep cron
root      1029     1  0 Jan27 ?        00:00:00 cron
root     26896  2149  0 10:07 pts/0    00:00:00 grep --color=auto cron

В syslog есть записи о выполнении задания cron:
cat /var/log/syslog | grep "CRON"
...
Jan 28 10:09:01 tst-serv CRON[26944]: (root) CMD (/usr/local/sbin/app_backup.sh > /dev/null 2>$1)
...

Подскажите, в чем может быть проблема и где еще можно посмотреть ошибки выполнения?

Спасибо.
« Последнее редактирование: 28 Январь 2016, 11:59:31 от elmuerto »

Punko

  • Гость
можно попробовать
mailтам есть письма от крона.

Оффлайн Karl500

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 2240
    • Просмотр профиля
Вы же сами направили оба вывода от скрипта (и stdout и stderr) в /dev/null - там и ищите ))
Если серьезно - направьте их в какой-нибудь (какие-нибудь) файлы.

Оффлайн elmuerto

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Вы же сами направили оба вывода от скрипта (и stdout и stderr) в /dev/null - там и ищите ))
Если серьезно - направьте их в какой-нибудь (какие-нибудь) файлы.

Karl500,

Спасибо за комментарий. Я пробовал такой вид записи задания в Cron.
SHELL=/bin/bash
MAILTO=user
PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin
#
*/1 * * * * /usr/local/sbin/app_backup.sh >> /usr/local/sbin/task_sch.log 2>$1

Создается пустой файл.

Оффлайн ALiEN175

  • Старожил
  • *
  • Сообщений: 2200
  • X-9000SC
    • Просмотр профиля
Благодарности на Yandex 41001488642430. Cпасибо.

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5660
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
2>$1
Вот интересно где Вы такое подсмотрели?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн elmuerto

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
ALiEN175, Azure,

Спасибо Вам огромное, все заработало!

Поквитался за свою невнимательность, причем только что просматривал статью http://xgu.ru/wiki/%D0%A1%D1%82%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D1%8B%D0%B5_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B8_%D0%B2%D0%B2%D0%BE%D0%B4%D0%B0/%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0 и не заметил ошибку.

Некорректный синтаксис команды был взят в виде примера из существующего crontab (/var/spool/cron/crontabs/root), куда при установке дистрибутива приложения были добавлены задания для выполнения perl скриптов (эту часть crontab я специально не приводил в посте, т.к. она не имеет отношения к задаче). Получается разработчики приложения допустили ошибку и их задания так же не выполняются. Напишу разработчикам, пусть учтут этот момент при выпуске патчей.

Еще раз спасибо. Всех благ.

 

Страница сгенерирована за 0.063 секунд. Запросов: 25.