П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое







Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 91647 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 28134 раз(а).

Учебник HTML.
Просмотров 54641 раз(а).

Руководство по PHP5.
Просмотров 25047 раз(а).

Хостинг через призму DNS.
Просмотров 29329 раз(а).

Подборка текстов стандартных документов.
Просмотров 28093 раз(а).

Учебник PHP - Самоучитель
Просмотров 32362 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 34089 раз(а).

Внешние атаки...
Просмотров 26086 раз(а).

Учебник PHP.
Просмотров 21990 раз(а).

SSI в примерах.
Просмотров 17297 раз(а).



 
 



16.3. Область применения

Как один из вариантов грамотного применения перенаправления ввода/вывода, можно назвать разбор и "сшивание" вывода от команд (см. Пример 11-6). Это позволяет создавать файлы отчетов и журналов регистрации событий.

Пример 16-11. Регистрация событий

#!/bin/bash
# logevents.sh, автор: Stephane Chazelas.

# Регистрация событий в файле.
# Сценарий должен запускаться с привилегиями root (что бы иметь право на запись в /var/log).

ROOT_UID=0     # Привилегии root имеет только пользователь с $UID = 0.
E_NOTROOT=67   # Код завершения, если не root.


if [ "$UID" -ne "$ROOT_UID" ]
then
  echo "Сценарий должен запускаться с привилегиями root."
  exit $E_NOTROOT
fi


FD_DEBUG1=3
FD_DEBUG2=4
FD_DEBUG3=5

# Раскомментарьте одну из двух строк, ниже, для активизации сценария.
# LOG_EVENTS=1
# LOG_VARS=1


log()  # Запись даты и времени в файл.
{
echo "$(date)  $*" >&7     # Добавляет в конец файла.
                              # См. ниже.
}



case $LOG_LEVEL in
 1) exec 3>&2         4> /dev/null 5> /dev/null;;
 2) exec 3>&2         4>&2         5> /dev/null;;
 3) exec 3>&2         4>&2         5>&2;;
 *) exec 3> /dev/null 4> /dev/null 5> /dev/null;;
esac

FD_LOGVARS=6
if [[ $LOG_VARS ]]
then exec 6>> /var/log/vars.log
else exec 6> /dev/null               # Подавить вывод.
fi

FD_LOGEVENTS=7
if [[ $LOG_EVENTS ]]
then
  # then exec 7 >(exec gawk '{print strftime(), $0}' >> /var/log/event.log)
  # Строка, выше, не работает в Bash, версии 2.04.
  exec 7>> /var/log/event.log        # Добавление в конец "event.log".
  log                                      # Записать дату и время.
else exec 7> /dev/null                  # Подавить вывод.
fi

echo "DEBUG3: beginning" >&${FD_DEBUG3}

ls -l >&5 2>&4                       # command1 >&5 2>&4

echo "Done"                                # command2

echo "sending mail" >&${FD_LOGEVENTS}   # Написать "sending mail" в дескр. #7.


exit 0

Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела



 







Copyright © 2005-2011 Project.Net.Ru