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


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

Автор Тема: Вывод output в логфайл из баш скрипта  (Прочитано 1133 раз)

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

Оффлайн BAKT

  • Автор темы
  • Участник
  • *
  • Сообщений: 112
    • Просмотр профиля
Есть простенький баш скрипт:

#!/bin/bash

echo -e "\n*******************\n${timestamp}\n*******************\n" >> /var/nod.log
/usr/bin/lftp -e 'mirror / /var/www/nod/www/; bye;' ftp://user:pass@host/ >> /var/nod.log 2>&1

и соответсвенно сам лог:

/var # ls -l
total 48
-rw-rw-rw-  1 root     root       62 авг.   5 02:20 nod.log

В чем проблемма: если скрипт запускать нормально, то в лог пишется всё, что я хочу. НО! Если скрипт запихнуть в крон и запускать по крону, то в лог пишется только вывод от echo.

*******************
2015.08.05 02:20:01
*******************


*******************
2015.08.05 02:22:01
*******************


*******************
2015.08.05 02:22:53
*******************

cd ok, cwd=/
Total: 1 directory, 356 files, 0 symlinks
To be removed: 1 directory, 116 files, 0 symlinks

Вот два запуска по крону, и один - вручную.

Что я делаю не так?


Оффлайн petro25

  • Участник
  • *
  • Сообщений: 182
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #1 : 05 Август 2015, 09:31:15 »
Сделай так:

твой скрипт | tee /var/log/my.log

Оффлайн BAKT

  • Автор темы
  • Участник
  • *
  • Сообщений: 112
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #2 : 05 Август 2015, 11:54:12 »
crontab -e

*/1 * * * *     /root/sh/nod_crewdk.sh | tee /root/logs/nod.log
cat /root/logs/nod.log

*******************
2015.08.05 11:53:01
*******************

Снова только вывод echo, при этом в файл записывается только информация о последнем вызове скрипта.

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13750
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #3 : 05 Август 2015, 12:44:46 »
попробуйте так
/usr/bin/lftp -e 'debug -o /var/nod.log 5; mirror / /var/www/nod/www/; bye;' ftp://user:pass@host/ >> /var/nod.log 2>&1
Принимаю благодарности в WMR и WMZ на кошельки:
R158160676909 и Z313280060764

Оффлайн BAKT

  • Автор темы
  • Участник
  • *
  • Сообщений: 112
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #4 : 05 Август 2015, 13:26:38 »
Либо лыжи не едут, либо я .....

После запуска вручную:

*******************
2015.08.05 13:10:31
*******************

cd ok, cwd=/
Total: 1 directory, 357 files, 0 symlinks
To be removed: 1 directory, 240 files, 0 symlinks

после запуска через cron:

*******************
2015.08.05 13:11:01
*******************




lftp ничего не выводит даже если я в кроне пытаюсь задачу от другого пользователя запустить! 

crontab -e

*/1 * * * *     su crew -c /home/crew/nod_crewdk.sh
Блин! Да как так получается то?!

Пользователь решил продолжить мысль 05 Август 2015, 14:00:51:
Поправка. Информация от дебага-то выводится, но столько инфы мне не нужно...

Попробовал добавить тригер --verbose к mirror. Но польза от него есть только если были переданы новые файлы. Если lftp не нашла ничего нового для передачи, то в логах снова пусто. :(
« Последнее редактирование: 05 Август 2015, 14:00:51 от BAKT »

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13750
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #5 : 05 Август 2015, 14:09:59 »
А почему не из крона в файл отправляете?

/root/sh/nod_crewdk.sh
#!/bin/bash
echo -e "\n*******************\n${timestamp}\n*******************\n" >> /var/nod.log
/usr/bin/lftp -e 'mirror / /var/www/nod/www/; bye;' ftp://user:pass@host/

*/1 * * * *  root  /root/sh/nod_crewdk.sh >> /root/logs/nod.log 2>&1
ЗЫ в кронтабе для указания пользователя su - лишнее

PPS Кстати, хреновая идея руту такие задачи поручать. Что такого в этой процедуре, что требует рутовых привелегий? Почему бы не пользовательским аккаунтом миррорить?
Принимаю благодарности в WMR и WMZ на кошельки:
R158160676909 и Z313280060764

Оффлайн BAKT

  • Автор темы
  • Участник
  • *
  • Сообщений: 112
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #6 : 05 Август 2015, 14:40:05 »
А почему не из крона в файл отправляете?

/root/sh/nod_crewdk.sh
#!/bin/bash
echo -e "\n*******************\n${timestamp}\n*******************\n" >> /var/nod.log
/usr/bin/lftp -e 'mirror / /var/www/nod/www/; bye;' ftp://user:pass@host/

*/1 * * * *  root  /root/sh/nod_crewdk.sh >> /root/logs/nod.log 2>&1

Результат аналогичен. Вывод echo - есть, а вывод lftp - нет.
Кстати, так как вы порекомендовали крон отказался работать:

cat nod.log
/bin/sh: 1: root: not found

ЗЫ в кронтабе для указания пользователя su - лишнее

Спасибо, учту.

PPS Кстати, хреновая идея руту такие задачи поручать. Что такого в этой процедуре, что требует рутовых привелегий? Почему бы не пользовательским аккаунтом миррорить?

Я понимаю, просто в попытках заставить это работать я перепробовал уже всё: менял права, владельцев, пути и т.д. и скрипта, и лога. Результата - нет. Вот и пытаюсь сейчас от рута запускать, чтоб уж "наверняка". Но что-то не выходит :(

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13750
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #7 : 05 Август 2015, 15:44:26 »
А так?
Цитировать
#!/bin/bash
echo -e "\n*******************\n${timestamp}\n*******************\n" >> /var/nod.log
/usr/bin/lftp -e 'mirror / /var/www/nod/www/; bye;' ftp://user:pass@host/
Принимаю благодарности в WMR и WMZ на кошельки:
R158160676909 и Z313280060764

Оффлайн victor00000

  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #8 : 05 Август 2015, 17:04:11 »
man lftp | grep "log"
Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн BAKT

  • Автор темы
  • Участник
  • *
  • Сообщений: 112
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #9 : 05 Август 2015, 19:09:53 »
А так?
Цитировать
#!/bin/bash
echo -e "\n*******************\n${timestamp}\n*******************\n" >> /var/nod.log
/usr/bin/lftp -e 'mirror / /var/www/nod/www/; bye;' ftp://user:pass@host/

Аналогично - echo есть, lftp - нету. Блин, мне бы понять - это у меня глюк и кривые руки или это в принципе так должно работать.
Может кто-нибудь попробовать у себя повторить?

man lftp | grep "log"

Пробовал уже:

Цитировать
lftp -e 'mirror --log=/root/logs/nod.log / /var/www/nod/www/; bye;' ftp://user:pass@host/

1. Если ни одного файла передано не было, то так же пустой лог
2. Файл лога постоянно перезаписывается без каких либо опозновательных данных (дата, время и т.д.), что для лога ну вообще ни разу не удобно.

Относительно немного помогает установка в логах или скрипте запуска установка настроек:

set xfer:log true
set xfer:log-file logfile

Однако, опять же, если ни одного файла передано не было, то так же имеем пустой лог.

Но куда девается простая статистика, которую я вижу при запуске вручную????

cd ok, cwd=/                               
Total: 1 directory, 357 files, 0 symlinks                 
To be removed: 0 directories, 180 files, 0 symlinks


Оффлайн victor00000

  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #10 : 05 Август 2015, 19:51:12 »
mirror что это?
Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн BAKT

  • Автор темы
  • Участник
  • *
  • Сообщений: 112
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #11 : 05 Август 2015, 19:54:06 »
mirror что это?


man lftp

Цитировать
mirror [OPTS] [source [target]]

       Mirror  specified  source  directory  to local target directory. If the target directory ends with a slash (except the root), the source base name is appended to target directory name. Source and/or target can be URLs pointing to directories.

Оффлайн victor00000

  • Забанен
  • Старожил
  • *
  • Сообщений: 15570
  • Глухонемой (Deaf)
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #12 : 05 Август 2015, 19:57:35 »
BAKT,
ну, счётчик стоит.
L~/lftp$ lftp -e 'mirror;bye' ftp://.....
cd ok, каталог=/                                                                 
Получение информации о файлах (23%) [Ожидание ответа...]                 
Получение информации о файлах (28%) [Ожидание ответа...] 
^C                                                                                   Прерывание
L~/lftp$

Нельзя друзья, дулу - AnrDaemon видите?
~.o

Оффлайн BAKT

  • Автор темы
  • Участник
  • *
  • Сообщений: 112
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #13 : 05 Август 2015, 20:02:43 »
Извините, но вы вопрос вообще видели?
Повторю: "Почему при запуске скрипта вручную всё что нужно всюду, куда нужно, выводится, а при запуске через крон - выводятся только сообщения от echo?"

Какой и при чём тут счётчик?

Оффлайн Cxms

  • Активист
  • *
  • Сообщений: 407
    • Просмотр профиля
Re: Вывод output в логфайл из баш скрипта
« Ответ #14 : 05 Август 2015, 22:56:03 »
Так пробывал?

*/1 * * * *     sudo bash -u #1000 /home/crew/nod_crewdk.sh
*/1 * * * *     bash /home/crew/nod_crewdk.sh
lftp -e 'mirror / /var/www/nod/www/; bye;' ftp://user:pass@host/ &>> /var/nod.log

 

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