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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

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

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

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28334
    • Просмотр профиля
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

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28334
    • Просмотр профиля
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

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

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
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

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

Оффлайн snowin

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

Оффлайн victor00000

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

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28334
    • Просмотр профиля
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

  • Активист
  • *
  • Сообщений: 883
    • Просмотр профиля
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

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

 

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