LINUX.ORG.RU

Обрезается вывод при выполнении bash-скрипта через cron

 , ,


0

7

Хочу периодически сохранять ARP-таблицу с коммутатора.

ssh admin@sw1 'show arp' > ./stat/arp_table
Выполняю в консоли, размер файла с выводом таблицы примерно 500Кб. Сохранил в arp_stat.sh, добавил в cron. При выполнении через cron вывод обрезается до 100Кб и сохраняется в файл. Кто-нибудь знает, что ему надо? Какие переменные окружения добавить? Варианты пробовал с сохранением вывода в переменную и через echo:
echo "$(cmd)" > ./stat/arp_table
Результат такой же: вручную работает, через cron - обрезает.

Ответ на: комментарий от mky

Коммутатор Cisco Catalyst 6500 Модель не указал, т.к. больше склоняюсь к проблемам в клиентской ОС, с которой выполняю скрипт. Под рутом и под обычным юзером данные удаётся получить, если запустить скрипт с консоли терминала.

terra_agro
() автор топика

Решить не удалось, сделал на Python:

#!/usr/bin/python
import paramiko

ip = '192.168.0.1'
username = 'user'
password = 'pass'

remote_conn_pre=paramiko.SSHClient()
remote_conn_pre.set_missing_host_key_policy(paramiko.AutoAddPolicy())
remote_conn_pre.connect(ip, port=22, username=username,
                        password=password,
                        look_for_keys=False, allow_agent=False)


stdin, stdout, stderr = remote_conn_pre.exec_command('show arp')
status = stdout.channel.exit_status_ready()
if status==0:
 mystring = stdout.read()
 print mystring

terra_agro
() автор топика

Очень странно.

Писем про ошибки крон не шлёт? Место на диске есть? Обрезается на строке или на 102400 -ом байте или как?

ssh admin@sw1 'show arp' | wc > ./stat/arp_table.wc

что даёт в кроне?

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

Размер не точно 100Кб и не всегда одинаковый, обрезает часто на середине строки. Попробовал на коммутаторе выставлять terminal length 0 (судя по документации макс. размер ограничен 511 строками, но в файле 100кб примерно 1700 строк получается),

# ls -l
-rw-r--r-- 1 root root 108545 июл 23 22:35 1532360108_arp-table
-rw-r--r-- 1 root root 101377 июл 23 22:36 1532360168_arp-table
-rw-r--r-- 1 root root 106497 июл 23 22:37 1532360228_arp-table
-rw-r--r-- 1 root root 108545 июл 23 22:38 1532360288_arp-table
-rw-r--r-- 1 root root 108545 июл 23 22:39 1532360348_arp-table
-rw-r--r-- 1 root root 101377 июл 23 22:40 1532360408_arp-table
-rw-r--r-- 1 root root 102401 июл 23 22:41 1532360468_arp-table
-rw-r--r-- 1 root root 106497 июл 23 22:42 1532360528_arp-table
-rw-r--r-- 1 root root 103425 июл 23 22:43 1532360588_arp-table
-rw-r--r-- 1 root root 102401 июл 23 22:44 1532360648_arp-table
-rw-r--r-- 1 root root 105473 июл 23 22:45 1532360708_arp-table

Место есть, крон сообщает, что команда выполнена успешно. Я уже после этого переписал на systemd, так же обрезается. Ещё обрезается, когда загружаю список команд из файла и выполняю сам из коммандной строки:

ssh admin@sw1 < commands.txt > ./stat/arp_table
# cat commands.txt
terminal length 0
show arp

wc -m проверял, выдаёт обрезанный размер, соответствующий размеру файла в байтах.

Проверял ssh в режиме verbose (-vvv) - ошибок не увидел. Проверял strace ssh - при обрыве, единственное, что отличается от правильного вывода, это в конце: ENOTTY (Inappropriate ioctl for device)

terra_agro
() автор топика
Ответ на: комментарий от router

Сомнительно. cron от рута выполняется. Да и какой лимит может ограничивать буфер вывода в 100k?

terra_agro
() автор топика
Ответ на: комментарий от terra_agro

Я думаю, что проблема в слишком быстром выводе, что-то в роутере портится. Если замедлить вывод, то может и заработает. Например, что-то типа ssh admin@sw1 'show arp | gzip' | gunzip > ./stat/arp_table

Ещё вариант ssh admin@sw1 'show arp; sleep 1; echo ""' > ./stat/arp_table

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

Странность заключается в том, что, как я писал в начале, скрипт успешно выполняется, если вручную запустить его в консоли. За исключением случая, когда нужно выполнить несколько команд и команды подаются из файла commands.txt Так же успешно выполняется скрипт написанный на Python. Поэтому, я думаю, что проблема в каких-то свойствах окружения, в котором происходит выполнение программы или параметрах соединения SSH.

terra_agro
() автор топика
Ответ на: комментарий от terra_agro

скрипт успешно выполняется, если вручную запустить его в консоли

С выводом в файл или на консоль?

legolegs ★★★★★
()

Почему не сохранить вывод арп таблицы в файл на удаленном хосте и затем скопировать его оттуда?

nerve ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.