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

О проекте

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

MySQL

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

Хостинг

Другое







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

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

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

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

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

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

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

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

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

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

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

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



 
 

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-2007 Project.Net.Ru