Perl для системного администрирования


Работа с дисковыми квотами - часть 4


  • Использовать объект синхронизации (inutex) или оговоренные ключи реестра (в NT/2000)
  • Общаться через сокеты
  • Использовать разделяемую память
  • И так далее. От вас как от программиста зависит, какой метод вы выберете, хотя зачастую определять выбор будут данные. Рассматривая их, вы будете принимать во внимание:

    • Направление соединения (одно- или двунаправленное?)
    • Частоту соединения (будет передано одно сообщение или несколько кусочков?)
    • Размер данных (будет это 10-мегабайтный файл или 20 символов?)
    • Формат данных (будет это двоичный файл или просто текст фиксированной ширины, разделенный определенным символом?)

    Наконец, учитывайте то, насколько сложным вы хотите сделать свой сценарий.

    В нашем случае мы собираемся выбрать простой, но мощный метод о о мена информацией. Так как первый процесс должен передать второму только набор инструкций по изменению информации (какие квоты изменять и на какие значения), мы установим между ними стандартный канал Unix. Первый процесс пошлет запрос на изменение в поток вывода, а копия, запущенная программой edquota, прочитает эту информацию со своего потока ввода.

    Давайте напишем программу. Первое, что должна делать программа при запуске - это решить, какую роль она должна выполнять. Пусть при первом вызове она получает несколько аргументов командной строки (то, что надо изменить), тогда как во второй раз, уже вызванная программой edquota, она получает только один аргумент (имя временного файла). Программа требует наличия нескольких ключей командной строки, если вызывается более чем с одним аргументом, поэтому мы можем полагаться на данное допущение при выборе роли для нашего сценария. Вот как выглядит код, определяющий роль сценария:

    $edquota = "/usr/etc/edquota"; и путь к edquota

    Sautoedq = "/usr/adm/autoedquota"; ц полный путь к этому сценарию

    ft это первый или второй запуск?

    ft если присутствует более одного аргумента - это первый запуск

    if ($»ARGV > 0) {

    &ParseArgs;

    &CallEdquota; }

    и в противном случае это второй запуск, и мы должны выполнить редактирование




    - Начало -  - Назад -  - Вперед -