Руководство по системному администрированию: контейнеры в Solaris - управление ресурсами и зонами

Глава 3 Администрирование проектов и задач

В этой главе рассматривается использование проектов и задач для управления ресурсами Solaris.

Рассматриваются следующие темы:

Краткое описание средств проектов и задач приведены в Глава 2Проекты и задачи (обзор).


Примечание –

Если эти средства используются в системе Solaris с установленными зонами, то через интерфейсы системных вызовов, получающие на входе идентификаторы процессов и выполняемые в неглобальной зоне, видны только процессы в той же зоне.


Администрирование проектов и задач (карта задач)

Задача 

Описание 

Инструкции 

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

Вывод идентификаторов задач и проектов, а также разнообразной статистики по выполняющимся в настоящее время процессам и проектам. 

Примеры команд и их параметров

Определение проекта 

Добавление записи проекта к файлу /etc/project и изменение значений для этой записи.

Определение проекта и просмотр текущего проекта

Удаление проекта 

Удаление записи проекта из файла /etc/project.

Удаление проекта из файла /etc/project

Проверка допустимости файла project или базы данных проектов.

Проверка синтаксиса файла /etc/project или сверка названия и идентификатора проекта с внешней службой имен в целях проверки уникальности.

Проверка допустимости содержимого файла /etc/project

Получение информации о членстве в проекте 

Вывод текущего членства вызывающего процесса в проекте. 

Получение информации о членстве в проекте

Создание новой задачи 

Создание новой задачи в определенном проекте командой newtask.

Создание новой задачи

Связывание выполняемого процесса с другой задачей и проектом 

Связывание номера процесса с новым идентификатором задачи в указанном проекте. 

Перемещение выполняющегося процесса в новую задачу

Добавление атрибутов проектов и работа с ними 

Добавление, редактирование, проверка допустимости и удаление атрибутов проектов командами административного управления базами данных проектов. 

Редактирование и проверка допустимости атрибутов проекта

Примеры команд и их параметров

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

Параметры команд, используемые с проектами и задачами

Команда ps

По команде ps с параметром -o отображаются идентификаторы задач и проектов. Например, для просмотра идентификатора проекта используется следующая команда:


# ps -o user,pid,uid,projid
USER PID   UID  PROJID
jtd  89430 124  4113

Команда id

Команда id с параметром -pпозволяет в дополнение к идентификаторам пользователя и группы вывести текущий идентификатор проекта. Если указывается операнд user, то отображается проект, связанный с нормальной учетной записью этого пользователя:


#  id -p
uid=124(jtd) gid=10(staff) projid=4113(booksite)

Команды pgrep и pkill

Если необходимо выполнить сопоставление только процессов с идентификаторами проектов из определенного списка, можно воспользоваться командами pgrep и pkill с параметром -J:


# pgrep -J projidlist
# pkill -J projidlist

Если необходимо отобразить сопоставление только для процессов, идентификаторы задач которых входят в определенный список, можно воспользоваться командами pgrep и pkill с параметром -T:


# pgrep -T taskidlist
# pkill -T taskidlist

Команда prstat

Команда prstat с параметром - J используется для отображения статистических данных для процессов и проектов, выполняющихся в настоящий момент.


% prstat -J
	  PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
 21634 jtd      5512K 4848K cpu0    44    0   0:00.00 0.3% prstat/1
   324 root       29M   75M sleep   59    0   0:08.27 0.2% Xsun/1
 15497 jtd        48M   41M sleep   49    0   0:08.26 0.1% adeptedit/1
   328 root     2856K 2600K sleep   58    0   0:00.00 0.0% mibiisa/11
  1979 jtd      1568K 1352K sleep   49    0   0:00.00 0.0% csh/1
  1977 jtd      7256K 5512K sleep   49    0   0:00.00 0.0% dtterm/1
   192 root     3680K 2856K sleep   58    0   0:00.36 0.0% automountd/5
  1845 jtd        24M   22M sleep   49    0   0:00.29 0.0% dtmail/11
  1009 jtd      9864K 8384K sleep   49    0   0:00.59 0.0% dtwm/8
   114 root     1640K  704K sleep   58    0   0:01.16 0.0% in.routed/1
   180 daemon   2704K 1944K sleep   58    0   0:00.00 0.0% statd/4
   145 root     2120K 1520K sleep   58    0   0:00.00 0.0% ypbind/1
   181 root     1864K 1336K sleep   51    0   0:00.00 0.0% lockd/1
   173 root     2584K 2136K sleep   58    0   0:00.00 0.0% inetd/1
   135 root     2960K 1424K sleep    0    0   0:00.00 0.0% keyserv/4
PROJID    NPROC  SIZE   RSS MEMORY      TIME  CPU PROJECT
    10       52  400M  271M    68%   0:11.45 0.4% booksite
     0       35  113M  129M    32%   0:10.46 0.2% system

Total: 87 processes, 205 lwps, load averages: 0.05, 0.02, 0.02

Команда prstat с параметром -T используется для отображения статистических данных для процессов и задач, выполняющихся в настоящий момент.


% prstat -T
   PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/NLWP
 23023 root       26M   20M sleep   59    0   0:03:18 0.6% Xsun/1
 23476 jtd        51M   45M sleep   49    0   0:04:31 0.5% adeptedit/1
 23432 jtd      6928K 5064K sleep   59    0   0:00:00 0.1% dtterm/1
 28959 jtd        26M   18M sleep   49    0   0:00:18 0.0% .netscape.bin/1
 23116 jtd      9232K 8104K sleep   59    0   0:00:27 0.0% dtwm/5
 29010 jtd      5144K 4664K cpu0    59    0   0:00:00 0.0% prstat/1
   200 root     3096K 1024K sleep   59    0   0:00:00 0.0% lpsched/1
   161 root     2120K 1600K sleep   59    0   0:00:00 0.0% lockd/2
   170 root     5888K 4248K sleep   59    0   0:03:10 0.0% automountd/3
   132 root     2120K 1408K sleep   59    0   0:00:00 0.0% ypbind/1
   162 daemon   2504K 1936K sleep   59    0   0:00:00 0.0% statd/2
   146 root     2560K 2008K sleep   59    0   0:00:00 0.0% inetd/1
   122 root     2336K 1264K sleep   59    0   0:00:00 0.0% keyserv/2
   119 root     2336K 1496K sleep   59    0   0:00:02 0.0% rpcbind/1
   104 root     1664K  672K sleep   59    0   0:00:03 0.0% in.rdisc/1
TASKID    NPROC  SIZE   RSS MEMORY      TIME  CPU PROJECT                     
   222       30  229M  161M    44%   0:05:54 0.6% group.staff                 
   223        1   26M   20M   5.3%   0:03:18 0.6% group.staff                 
    12        1   61M   33M   8.9%   0:00:31 0.0% group.staff                 
     1       33   85M   53M    14%   0:03:33 0.0% system                      

Total: 65 processes, 154 lwps, load averages: 0.04, 0.05, 0.06	

Примечание –

Совместное использование параметров -J и -T не допускается.


Использование команд cron и su с проектами и задачами

Команда cron

Команда cron использует функцию settaskid, что позволяет обеспечить выполнение каждого задания cron, at и batch в отдельной задаче, с соответствующим проектом по умолчанию для пользователя, отправляющего его на выполнение. Команды at и batch также сохраняют текущий идентификатор проекта, что позволяет обеспечить восстановление идентификатора проекта при выполнении задания at.

Команда su

Команда su присоединяется к проекту по умолчанию целевого пользователя путем создания новой задачи в порядке симуляции входа в систему.

Для переключения проекта пользователя по умолчанию с помощью команды su введите:


# su user

Администрирование проектов

ProcedureОпределение проекта и просмотр текущего проекта

В этом примере показано добавление записи проекта командой projadd и изменение этой записи командой projmod.

  1. Перейдите в режим суперпользователя или воспользуйтесь эквивалентной ролью.

    Роли содержат подтвержденные полномочия и привилегированные команды. Для получения дополнительной информации о ролях см. раздел Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Отобразите файл /etc/project по умолчанию командой projects -l.


    # projects -l
    system:0::::
    user.root:1::::
    noproject:2::::
    default:3::::
    group.staff:10::::system
            projid : 0
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    user.root
            projid : 1
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    noproject
            projid : 2
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    default
            projid : 3
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    group.staff
            projid : 10
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
  3. Добавьте проект с именем booksite. Назначьте проект пользователю с именем mark и укажите идентификатор проекта 4113.


    # projadd -U mark -p 4113 booksite
    
  4. Снова просмотрите файл /etc/project.


    # projects -l
    system
            projid : 0
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    user.root
            projid : 1
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    noproject
            projid : 2
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    default
            projid : 3
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    group.staff
            projid : 10
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    booksite
            projid : 4113
            comment: ""
            users  : mark
            groups : (none)
            attribs: 
  5. Добавьте в поле комментария описание проекта.


    # projmod -c `Book Auction Project' booksite
    
  6. Просмотрите изменения в файле /etc/project .


    # projects -l
    system
            projid : 0
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    user.root
            projid : 1
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    noproject
            projid : 2
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    default
            projid : 3
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    group.staff
            projid : 10
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    booksite
            projid : 4113
            comment: "Book Auction Project"
            users  : mark
            groups : (none)
            attribs: 
См. также

Инструкции по связыванию проектов, задач и процессов с пулом приведены в Установка атрибутов пулов и связывание с пулом.

ProcedureУдаление проекта из файла /etc/project

В этом примере показан способ удаления проекта командой projdel.

  1. Перейдите в режим суперпользователя или воспользуйтесь эквивалентной ролью.

    Роли содержат подтвержденные полномочия и привилегированные команды. Для получения дополнительной информации о ролях см. раздел Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Удалите проект booksite командой projdel.


    # projdel booksite
    
  3. Просмотрите файл /etc/project.


    # projects -l
    system
            projid : 0
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    user.root
            projid : 1
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    noproject
            projid : 2
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    default
            projid : 3
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
    group.staff
            projid : 10
            comment: ""
            users  : (none)
            groups : (none)
            attribs: 
  4. Войдите в систему как пользователь mark и введите команду projects для просмотра проектов, назначенных этому пользователю.


    # su - mark
    # projects
    default

Проверка допустимости содержимого файла /etc/project

При отсутствии параметров редактирования команда projmod проверяет допустимость содержимого файла project.

Для проверки допустимости карты NIS необходимо ввести следующую команду от имени суперпользователя:


# ypcat project | projmod -f —

Примечание –

Команда ypcat project | projmod -f – еще не реализована.


Проверку синтаксиса файла /etc/project можно выполнить следующей командой:


# projmod -n

Получение информации о членстве в проекте

Для вывода данных о принадлежности запускаемого процесса к проекту используется команда id с параметром -p.


$ id -p
uid=100(mark) gid=1(other) projid=3(default)

ProcedureСоздание новой задачи

  1. Войдите в систему как участник целевого проекта booksite.

  2. Создайте новую задачу в проекте booksite с помощью команды newtask с параметром - v (подробный режим) для получения системного идентификатора задачи.


    machine% newtask -v -p booksite
    16

    По команде newtask в указанном проекте создается новая задача, и в эту задачу помещается интерпретатор команд пользователя по умолчанию.

  3. Просмотрите текущие данные по членству вызывающего процесса в проекте следующей командой.


    machine% id -p
    uid=100(mark) gid=1(other) projid=4113(booksite)

    Процесс теперь является членом нового проекта.

ProcedureПеремещение выполняющегося процесса в новую задачу

В этом примере показано связывание выполняемого процесса с другой задачей и с новым проектом. Для этого необходимо либо стать суперпользователем, либо быть владельцем процесса и членом нового проекта.

  1. Перейдите в режим суперпользователя или воспользуйтесь эквивалентной ролью.

    Роли содержат подтвержденные полномочия и привилегированные команды. Для получения дополнительной информации о ролях см. раздел Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.


    Примечание –

    Если текущий пользователь является владельцем процесса или членом нового проекта, этот этап можно пропустить.


  2. Определите идентификатор процесса book_catalog.


    # pgrep book_catalog
    	8100
  3. Свяжите процесс 8100 с новым идентификатором задачи в проекте booksite.


    # newtask -v -p booksite -c 8100
    	17

    Параметр -c указывает, что команда newtask должна быть выполнена в отношении существующего именованного процесса.

  4. Проверьте связь идентификаторов задачи и процесса.


    # pgrep -T 17
    	8100

Редактирование и проверка допустимости атрибутов проекта

Для редактирования атрибутов проекта используются команды администрирования базы данных проектов projadd и projmod.

Параметр -K позволяет указать альтернативный список атрибутов. Атрибуты разграничиваются символом точки с запятой (;). Если параметр -K используется с параметром -a, атрибут или значение атрибута добавляется. Если параметр -K используется с параметром -r, атрибут или значение атрибута удаляется. Если параметр -K используется с параметром - s, выполняется замена атрибута или значения атрибута.

ProcedureДобавление атрибутов и значений атрибутов к проектам

Для добавления значений к атрибуту проекта используется команда projmod с параметрами -a и - K. Если атрибут не существует, он создается.

  1. Перейдите в режим суперпользователя или воспользуйтесь эквивалентной ролью.

    Роли содержат подтвержденные полномочия и привилегированные команды. Для получения дополнительной информации о ролях см. раздел Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Добавьте атрибут элемента управления ресурсами без значений task.max-lwps в проект myproject. Задача, вступающая в проект, оперирует только системным значением для этого атрибута.


    # projmod -a -K task.max-lwps myproject
    
  3. Затем можно добавить значение для task.max-lwps в проекте myproject. Значение состоит из уровня полномочий, порогового значения и действия в случае достижения этого порогового значения.


    # projmod -a -K "task.max-lwps=(priv,100,deny)" myproject
    
  4. Поскольку элементы управления ресурсами могут иметь несколько значений, той же командой к списку существующих значений можно добавить дополнительные значения.


    # projmod -a -K "task.max-lwps=(priv,1000,signal=KILL)" myproject
    

    Множественные значения разделяются запятыми. Запись task.max-lwps теперь имеет следующий вид:


    task.max-lwps=(priv,100,deny),(priv,1000,signal=KILL)

ProcedureУдаление значений атрибутов из проектов

В процедуре предполагаются значения:


task.max-lwps=(priv,100,deny),(priv,1000,signal=KILL)
  1. Перейдите в режим суперпользователя или воспользуйтесь эквивалентной ролью.

    Роли содержат подтвержденные полномочия и привилегированные команды. Для получения дополнительной информации о ролях см. раздел Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Для удаления значения атрибута из элемента управления ресурсами task.max-lwps в проекте myproject используется команда projmod с параметрами -r и -K.


    # projmod -r -K "task.max-lwps=(priv,100,deny)" myproject
    

    Если у task.max-lwps несколько значений, например:


    task.max-lwps=(priv,100,deny),(priv,1000,signal=KILL)

    Удаляется первое совпадающее значение. Результат будет следующим:


    task.max-lwps=(priv,1000,signal=KILL)

ProcedureУдаление атрибута элемента управления ресурсами из проекта

Для удаления элемента управления ресурсами task.max-lwps в проекте myproject используется команда projmod с параметрами - r и -K.

  1. Перейдите в режим суперпользователя или воспользуйтесь эквивалентной ролью.

    Роли содержат подтвержденные полномочия и привилегированные команды. Для получения дополнительной информации о ролях см. раздел Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Удалите атрибут task.max-lwps и все его значения из проекта myproject:


    # projmod -r -K task.max-lwps myproject
    

ProcedureЗамена атрибутов и значений атрибутов для проектов

Для подстановки другого значения атрибута task.max-lwps в проекте myproject используется команда projmod с параметрами -s и -K. Если атрибут не существует, он создается.

  1. Перейдите в режим суперпользователя или воспользуйтесь эквивалентной ролью.

    Роли содержат подтвержденные полномочия и привилегированные команды. Для получения дополнительной информации о ролях см. раздел Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Замените текущие значения task.max-lwps новыми значениями, приведенными ниже:


    # projmod -s -K "task.max-lwps=(priv,100,none),(priv,120,deny)" myproject
    

    Результат будет следующим:


    task.max-lwps=(priv,100,none),(priv,120,deny)

ProcedureУдаление существующих значений атрибутов элементов управления ресурсами

  1. Перейдите в режим суперпользователя или воспользуйтесь эквивалентной ролью.

    Роли содержат подтвержденные полномочия и привилегированные команды. Для получения дополнительной информации о ролях см. раздел Using the Solaris Management Tools With RBAC (Task Map) в System Administration Guide: Basic Administration.

  2. Для удаления текущих значений task.max-lwps из проекта myproject введите следующую команду:


    # projmod -s -K task.max-lwps myproject