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


Автор Тема: Помогите написать скрипт для cron (копировать на FTP каждый час файл *.csv)  (Прочитано 9355 раз)

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

Оффлайн dearfear

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Ubuntu Server 9.04.
Нужно каждый час копировать некий файл с расширением *.csv постоянно  лежащий в одном и том же месте на сервер FTP в указанную папку, каждый раз перезаписывая его.
Подсеть где находится Ubuntu Server 9.04 постоянно подключена к интернет посредством GPRS модема Huawei E1550 воткнутого в модифицированный DIR 320.
Задача стоит в написании скрипта на сервере. Прошу помощи у уважаемого сообщества.   

Оффлайн Uzul

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
    • Личный секретарь
Скрипт:
#!/bin/sh
#
# Put file to ftp dirs & clear local
#

#########################################
echo "Setting variables..."
backupserver=ftp.ru
backupuser=user
backuppassword=pass

echo "Uploading files using ftp..."
echo "connect"
ftp -in $backupserver<<_EOF_
user $backupuser $backuppassword
passive
bin
mput /home/user/log/*.csv
quit
_EOF_

echo "Cleaning log directory..."
rm /home/user/log/*.csv
echo "Done."
Соответственно его делаем исполняемым и суем в кронтаб.
Ведь совсем неважно, от чего помрешь,
Ведь куда важнее, для чего родился.
<А. Башлачев>

Оффлайн dearfear

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
О! благодарю! Есть пара вопросов:
$backupuser $backuppassword это пользователь которому это можно делать ?
И куда засунуть скрипт ?

Оффлайн Uzul

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
    • Личный секретарь
$backupuser $backuppassword - это переменные, в которые надо записать логин и пароль пользователся, у которого есть доступ к фтп-серверу. В примере это "user" и "pass", надо подставить свои.
Засунуть в crontab - здесь на форуме очень много информации по этому вопросу.
Например - Запускаем crontab,  без sudo или su. Иначе не запустится.

crontab -e

а в нем:

5 23 * * * /путь_ к_файлу/скрипт.sh

запустится 23.05 каждый день.
« Последнее редактирование: 26 Январь 2010, 13:21:00 от Uzul »
Ведь совсем неважно, от чего помрешь,
Ведь куда важнее, для чего родился.
<А. Башлачев>

Оффлайн dearfear

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Благодарю, ушёл пробовать.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 25950
    • Просмотр профиля
Имей в виду, этот скрипт совершенно не проверяет удачность заливки.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн dearfear

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Есть возможность исправить это ? Скажем при разрыве соединения залить заново? Или сравнить CRC файлов и их размер ?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 25950
    • Просмотр профиля
man ftp
?
Использовать другие инструменты? (curl ?)
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн dearfear

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Честно говоря решение пока не совсем понимаю. Но задачка интересная.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 25950
    • Просмотр профиля
curl --upload-file /path/file -- ftp://user:password@ftp.host/path
И проверять результат выполнения команды.
Правда, на счет докачки я не того...
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн dearfear

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Скрипт:
#!/bin/sh
#
# Put file to ftp dirs & clear local
#

#########################################
echo "Setting variables..."
backupserver=ftp.ru
backupuser=user
backuppassword=pass

echo "Uploading files using ftp..."
echo "connect"
ftp -in $backupserver<<_EOF_
user $backupuser $backuppassword
passive
bin
mput /home/user/log/*.csv
quit
_EOF_

echo "Cleaning log directory..."
rm /home/user/log/*.csv
echo "Done."
Соответственно его делаем исполняемым и суем в кронтаб.
Уважаемый, а как указать путь на FTP сервере куда ложить ?

Пользователь решил продолжить мысль 27 Январь 2010, 08:50:41:
local: /home/user/files/sbase/*.csv: No such file or directory хотя файл там лежит.. т.к. команда rm удаляет его...
Мне кажется нет команды куда сохранять в скрипте, никак не могу найти :(
« Последнее редактирование: 27 Январь 2010, 08:50:41 от dearfear »

Оффлайн Uzul

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
    • Личный секретарь
Цитировать
dir – выводит список файлов и директорий с атрибутами, указанием пользователя, имеющего доступ к ним, датой создания, размером в байтах, количестве поддиректорий…
ls – упрощенная версия команды dir
сd – изменяет текущую директорию на ftp сервере. Например: cd html позволит попасть вам в папку html. Для выхода в верхний ярус директорий используйте cd .. (и две точки)
pwd – покажет директорию, в которой Вы сейчас находитесь
Собственно, меняем на сервере текущий каталог и кладем. Дополнительные команды привел в частности как вариант для проверки наличия и характеристик файла.

Цитировать
local: /home/user/files/sbase/*.csv: No such file or directory
Вы уверены, что вашего локального пользователя зовут user?
Ведь совсем неважно, от чего помрешь,
Ведь куда важнее, для чего родился.
<А. Башлачев>

Оффлайн dearfear

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Да, пользователя у которого лежит этот файл действительно зовут user

Оффлайн Uzul

  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
    • Личный секретарь
Попробуйте вместо mput /home/user/files/sbase/*.csv использовать put /home/user/files/sbase/точное_имя.csv - ведь надо отсылать один файл?
Второй вариант - использовать не put /home/user/files/sbase/точное_имя.csv, а комбинацию
cd /home/user/files/sbase - в начале скрипта, до входа в фтп
put точное_имя.csv - уже в фтп
Ведь совсем неважно, от чего помрешь,
Ведь куда важнее, для чего родился.
<А. Башлачев>

Оффлайн dearfear

  • Автор темы
  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Посидит подумает, что нибудь придумает...

#!/bin/sh
#
# Put file to ftp dirs & clear local
#

#########################################
echo "Setting variables"
backupserver=myserver.com
backupuser=myuser
backuppassword=mypassword

cd /home/user/files/sbase
dir
echo "Upload files using FTP"
echo "State connected"
ftp -in $backupserver<<_EOF_
user $backupuser $backuppassword
passive
cd /way/to/target/
pwd
bin
mput filename.file
quit
_EOF_

echo "Cleaning log directory..."
rm /home/user/files/sbase/*.file
echo "Done!"


+1 в карму участникам темы

 

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