2013-09-10 2 views
0

Im, пишущий простой скрипт, который отлично работает, отображает вывод на экран. Я хотел бы перенаправить это сообщение в файл с именем по одной из переменных, но он продолжает создавать пустые файлы без вывода.redirecting out put in inested for loop

В основном, я хочу видеть записи crontab для каждого зарегистрированного пользователя и перенаправить вывод в файл, где имя файла является именем сервера.


servers=`cat hosts.txt` 
for i in $servers; 
do 
    echo $i 
    users=`ssh $i cut -d ":" -f1 /etc/passwd` 
    for n in $users 
    do 
     crontab -u $n -l > $i-test.txt 
    done 
done 

файл <servername>-test.txt получает создан, но выход из crontab -u $n -l не существует, но отображается на экране.

любая помощь будет оценена.

благодарит

+4

Вы используете crontab на своей основной машине, а не на своих серверных машинах. Было ли это так? –

+0

Несмотря на то, что в руководстве указано для параметра '-l', вы можете проверить, действительно ли' crontab' пишет стандартную ошибку? 'crontab -u $ n -l 2> $ i-text.txt'. – chepner

+0

На самом деле, это неправильно, его предполагается вытащить пользователей из/etc/passwd на каждый ящик и запустить crontab -u $ user -l и вывести эту информацию в текстовый файл, имя servername.txt – DRO

ответ

0

Вы перезаписать содержимое hostname-text.txt каждый раз, и, когда последний пользователь учетной записи системы или другого пользователя без кронтаб, файл будет пустым.

Между тем, вы получите сообщение об ошибке для crontab, «no crontab for ...», для всех пользователей, так как это будет напечатано на stderr.

Исправление зависит от того, что вы хотите сделать. Вот небольшой фикс, который перенаправляет весь цикл, вместе с информацией об ошибке:

servers=`cat hosts.txt` 
for i in $servers; 
do 
    echo $i 
    users=`ssh $i cut -d ":" -f1 /etc/passwd` 
    for n in $users 
    do 
     echo "Crontab for $n:" 
     ssh "$i" crontab -u $n -l 
     echo 
    done > "$i-test.txt" 2>&1 
done 

Это даст вам файл myhost-test.txt, содержащее что-то вроде

Crontab for user: 
0 * * * * foo 
0 4 * * * bar 

Crontab for mysql: 
no crontab for mysql 

(Это игнорирует интервал, цитирование и эффективность проблем в пользу приклеиваться вплотную к вашему коду.)