Назад | Перейти на главную страницу

Скрипт cron bash пропускает второй набор do / done

У меня есть сценарий, который проверяет IP-адреса для ответа на запрос ping, а затем пытается запустить на них snmpwalk. Я пытаюсь запланировать еженедельный запуск скрипта в cron. Когда я запускаю сценарий в оболочке, он работает отлично. Когда я запускаю cron в webmin, он пропускает второй набор do / done.

Сценарий выполняет эхо-запрос IP-адресов от .21 до .30 и записывает их в файл 'hostip'. Затем он запускает каждую строку этого файла с помощью команды snmpwalk.

#!/bin/bash
#USAGE: âscriptname 10.1.1â³
set +x
for i in {21..30};
do fping -t300 -a $1.$i >> hostip
done
set -x
cat hostip | while read line;
do
echo snmpwalk -v 2c -c public "$line" iso.3.6.1.2.1.17.4.3.1;
snmpwalk -v 2c -c public "$line" iso.3.6.1.2.1.17.4.3.1;
done
wait
rm -Rf hostip

Когда я запускаю интерактивную оболочку (SSH), создается файл хоста и выполняются snmpwalks. Однако, когда я нажимаю Run Now в корневом cron в Webmin, я вижу:

+ set +x
+ cat hostip
+ read line
+ wait
+ rm -Rf hostip

Он не возвращает команды snmpwalk. Как заставить скрипт работать в cron так же, как он работает в инверактивной оболочке? Я попытался провести исследование в Интернете, но не могу найти случаев, когда эхо или строка при чтении вызывают проблемы. Скрипт исполняемый

Вы можете попробовать это вместо этого.

fping -t300 -a $1.{21..30} | while read online_ip; do
  echo snmpwalk -v 2c -c public $online_ip iso.3.6.1.2.1.17.4.3.1;
  snmpwalk -v 2c -c public $online_ip iso.3.6.1.2.1.17.4.3.1;
done

Это сделает то же самое, но вместо передачи вывода fping в файл вы можете просто передать этот вывод в цикл while.