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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Не правильно выполняется скрипт bash через cron  (Прочитано 1077 раз)

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

Оффлайн The Kaban

  • Автор темы
  • Участник
  • *
  • Сообщений: 114
    • Просмотр профиля
Здравствуйте!
Помогите пожалуйста разобраться, написал небольшой скрипт который по задумке должен работать так:
1. При запуске скрипта проверяем смонтирована шара или нет, если нет, то монтируем
2. Делаем бекап при помощи rsync
3. После бекапа проверяем, если шара смонтирована, то от монтируем ее.

Код скрипта:
#!/bin/bash
dir_name="//192.168.0.12/share"
# Проверяем примонтировано //192.168.0.12/share или нет, если нет, то монтируем
if ! df | grep "$dir_name"; then
mount.cifs //192.168.0.12/share /media/share/ -o user=***,password=***,iocharset=utf8,file_mode=0666,dir_mode=0777 0 0
fi

source_bkp=/media/share/
bkp_dir=/backup/share/current
del_dir=/backup/share/old/
mkdir -p ${del_dir}
# Делаем бекап
rsync -A -a -x --delete ${source_bkp} ${bkp_dir} --backup --backup-dir=${del_dir}/`date +%d-%m-%Y-%H:%M`/
# Если фаил старше 30 дней, то удаляем
find ${del_dir} -maxdepth 1 -type d -atime +30 -exec rm -rf {} \;
# Удаляем пустые дериктории
find ${del_dir} -empty -type d -delete

# Проверяем примонтировано //192.168.0.12/share или нет, если да, то отмонтируем
if  df | grep "$dir_name"; then
umount //192.168.0.12/share
fi
При запуске в ручную от #sh script_name.sh, все отрабатывает как надо. Проверял несколько раз!
Решил его запускать через cron каждый день в 02:30, для этого набрал #crontab -e и добавил новую запись:
30 02 * * * /home/test/scripts/script_name.shПрава на файл стоят #chmod 0744

Вот теперь к проблеме, сегодня с утра решил проверить бекап, а его нет.(
Вчера в директории /backup/share/current остались файлы после ручного бекапа, сегодня эта папка стала пустой, а все файлы из /backup/share/current переместились в /backup/share/old/02-02-2017-02:30.

Смею предположить что была проигнорирована команда mount.cifs и в связи с этим директория /media/share/ оказалась пустой что и привело к такому результату.

Еще раз повторю, что руками #sh script_name.sh скрипт отрабатывает нормально!

Подскажите пожалуйста, с чем это может быть связано и как с этим бороться?
Спасибо!
« Последнее редактирование: 02 Февраль 2017, 17:15:11 от The Kaban »

Онлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27433
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #1 : 02 Февраль 2017, 17:55:03 »
rsync по самбе - то ещё извращение…
Только для малого количества небольших фалов.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн The Kaban

  • Автор темы
  • Участник
  • *
  • Сообщений: 114
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #2 : 02 Февраль 2017, 18:27:12 »
AnrDaemon,
Спасибо за ответ!

Там всего 2 файла, до 1 гигабайта.

Подскажите пожалуйста, как тогда правельние это реализовать?
Спасибо!

Онлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27433
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #3 : 02 Февраль 2017, 18:30:50 »
Поставьте SSH на втором хосте и гоняйте через него rsync.
/usr/bin/rsync -Fxtcrv --iconv="." --rsh="ssh" --rsync-path='$HOME/bin/rsyncd' -- \
  "$DIRBASE/export/" "$REMBASE/" \
$HOME/bin/rsyncd:
#!/bin/sh
logger -is -- Running custom rsync $USER $*
/usr/bin/rsync --config="$HOME/.rsyncd" "$@"
$HOME/.rsyncd:
address 127.0.0.0
uid = anrdaemon
#gid = Domain\x20Users
use chroot = no
refuse options = no-iconv

[Documents]
path = /home/anrdaemon/Documents
comment = Documents
read only = no
charset = UTF-8
incoming chmod = Dg+s,o=

[arc]
path = /home/.a
comment = Archive
read only = no
charset = UTF-8
incoming chmod = Dg+s,o=
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн snowin

  • Активист
  • *
  • Сообщений: 843
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #4 : 02 Февраль 2017, 18:32:43 »
The Kaban, как минимум твой скрипт ничего не знает о rsync, find etc
добавь переменную path и пропиши пути до этих утилит

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #5 : 03 Февраль 2017, 02:29:44 »
1. При запуске скрипта проверяем смонтирована шара или нет, если нет, то монтируем
и проверяем примонтировалось ли.

Оффлайн The Kaban

  • Автор темы
  • Участник
  • *
  • Сообщений: 114
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #6 : 03 Февраль 2017, 02:33:03 »
The Kaban, как минимум твой скрипт ничего не знает о rsync, find etc
добавь переменную path и пропиши пути до этих утилит
Спасибо за совет,
Для rsync прописал вот так:  /usr/bin/rsync ...
Для find вот так: /usr/bin/find ...

Завтра с утра посмотрим что из этого выйдет, но боюсь что нечего не получится. Так как по предыдущим наблюдением есть ощущение что, неотрабатывает либо условие if ! df | grep "dir_name"; then, либо команда mount.cifs ...

Самое интересное что от руки работает нормально, а через crontab не хочет(((
Завтра посмотрю сработала идея с добавлением путей или нет.

AnrDaemon,  вторая машина под windows

Ещё раз Всем Спасибо!

Пользователь добавил сообщение 03 Февраль 2017, 02:35:02:
renzrv,  Спасибо, завтра попробую!
« Последнее редактирование: 03 Февраль 2017, 02:35:02 от The Kaban »

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2628
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #7 : 03 Февраль 2017, 02:37:57 »
Пути к прогам не нужно писать, только добавить в начало:
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Оффлайн snowin

  • Активист
  • *
  • Сообщений: 843
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #8 : 03 Февраль 2017, 09:24:00 »
export PATH=/
export не нужен
в данном случае переменная path выполняется в локальном скрипте и её видимость необходима и достаточна только для этого скрипта

Оффлайн victor00000

  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #9 : 03 Февраль 2017, 09:34:15 »
/etc/environment - это помогат для PATH.
Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн scsiman

  • Активист
  • *
  • Сообщений: 344
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #10 : 03 Февраль 2017, 10:33:05 »
вторая машина под windows
И что, из-за этого на ней нельзя ssh поднять?
Dell Studio XPS 16, Ubuntu 16.04 LTS (Home).
HP nx6110, Ubuntu 8.04 LTS => 10.04 LTS (Home).

Онлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 27433
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #11 : 03 Февраль 2017, 11:08:56 »
вторая машина под windows
Ну и что?

Пользователь добавил сообщение 03 Февраль 2017, 11:13:08:
victor00000, а ничего, что /etc/environment для cron - пустое место?…
« Последнее редактирование: 03 Февраль 2017, 11:13:08 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн snowin

  • Активист
  • *
  • Сообщений: 843
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #12 : 03 Февраль 2017, 11:16:08 »
if ! df | grep "$dir_name"; then mount.cifs //192.168.0.12/share /media/share/ -o user=***,password=***,iocharset=utf8,file_mode=0666,dir_mode=0777 0 0 fi
данную конструкцию я бы сделал так
mount.cifs //192.168.0.12/share /media/share/ -o user=***,password=***,iocharset=utf8,file_mode=0640,dir_mode=0775 0 0
if [[ $? -gt 0 ]]; then exit 1 fi

Оффлайн The Kaban

  • Автор темы
  • Участник
  • *
  • Сообщений: 114
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #13 : 03 Февраль 2017, 13:28:36 »
scsiman, AnrDaemon,
Вроде уловил мысль, но не уверен что правильно(
Получается мне нужно на Windows машину с которой я хочу забрать файлы при помощи rsync установить что-то типа OpenSSH?
Сейчас хочу попробывать поставить через Cygwin.
Спасибо!

Пути к прогам не нужно писать, только добавить в начало:
Код: [Выделить]

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Спасибо, попробую, но думаю что положительного результата не будет.

данную конструкцию я бы сделал так
Код: [Выделить]

mount.cifs //192.168.0.12/share /media/share/ -o user=***,password=***,iocharset=utf8,file_mode=0640,dir_mode=0775 0 0
if [[ $? -gt 0 ]]; then exit 1 fi
Я правильно понял, что вначале без проверок монтируем шару, а потом проверяем?
Спасибо!

Оффлайн snowin

  • Активист
  • *
  • Сообщений: 843
    • Просмотр профиля
Re: Не правильно выполняется скрипт bash через cron
« Ответ #14 : 03 Февраль 2017, 16:18:47 »
Я правильно понял, что вначале без проверок монтируем шару, а потом проверяем?
не правильно
применяем команду mount, которая возвращает 0 в случае корректной отработки и больше 0 если команда выполнилась с ошибкой
в случае ошибки выполнения команды mount - завершаем ваыполнение скрипта с не нулевым результатом

 

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