Вы здесь

Работа с проектами

Описание технологии

Для того чтобы четко определить функциональность используемых рабочих областей в операционной системе Solaris их гипотетически разделили на два основных типа: project(проекты) и task(задачи). Проекты представляют собой совокупность распределенных по сети задач, а сами задачи включают в себя рабочие процессы.

Проекты являются вершиной дерева. По своей сути их можно сопоставить с пользователями и группами пользователей, зарегистрированными в системе. Любой пользователь при входе в систему обязательно прикрепляется к определенному для него проекту либо проекту по умолчанию. Пользователь, также, может ассоциироваться и с несколькими проектами одновременно.

Система определяет к какому проекту прикреплен пользователь в момент его входа в нее по следующему алгоритму:

Просматривается файл /etc/user_attr (база расширенных атрибутов пользователей) и если этот пользователь в нем присутствует, то использует для него объявленный в этом файле параметр project
Просматривается файл /etc/project и если в нем объявлен проект для user. user_id, то система использует этот проект в качестве ╚default╩ для данного пользователя
Просматривается файл /etc/project и если в нем объявлен проект для group.group-name, то система использует этот проект в качестве ╚default╩ для данного пользователя, если эта группа является главной(primary) для данного пользователя
Если прописан проект default в файле /etc/project, то он назначается проектом по умолчанию для всех пользователей
Локальная база проектов, как вы уже очевидно догадались, находится в /etc/project. Ее можно делегировать в различные службы имен: NIS, NIS+, LDAP.

Формат этого файла довольно прост:

projname:projid:comment:user-list:group-list:attributes

где
projname √ имя проекта
projid √ уникальный идентификатор проекта
comment √ описание проекта (не обязательное поле)
user-list √ список пользователей, использующих данный проект
group-list √ список групп пользователей, использующих данный проект
attributes √ параметры, определяющие возможность использования ресурсов

projdel - delete a project from the system

Пример содержимого файла /etc/project:

# cat /etc/project

system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::

При успешном входе в систему проект в рамках процедуры входа создает новую задачу, которая включает в себя все процессы, ассоциированные с ней (см. рисунок выше). Задачи автоматически получают свой уникальный ID и однозначно привязываются только к одному проекту.

Задачи создаются при следующих действиях/командах:

login
cron
su
newtask
setproject
Рассмотрим теперь, как можно на практике создавать, управлять и анализировать работу с проектами и задачами:

1. Используя команды id и ps можно определить с какими проектами ассоциирован пользователь:

bash-2.05b$ id -p
uid=101(urix) gid=1(other) projid=3(default)

bash-2.05b$ ps -o user,pid,uid,projid
═══ USER══ PID══ UID PROJID
═══ urix═ 2311══ 101════ 3
═══ urix═ 2369══ 101════ 3

и для пользователя root:

# id -p
uid=0(root) gid=1(other) projid=1(user.root)

# ps -o user,pid,uid,projid
═══ USER══ PID══ UID PROJID
═══ root═ 2203════ 0════ 1
═══ root═ 2352════ 0════ 1

2. С помощью команды prstat можно динамически просматривать и процессы, работающие в системе, и проекты (опция - J):

# prstat √J

══ PID USERNAME═ SIZE══ RSS STATE═ PRI NICE═════ TIME═ CPU PROCESS/NLWP══════
═ 2185 urix══════ 61M══ 10M sleep══ 59═══ 0══ 0:00:01 0.5% gnome-terminal/1
═ 2397 root════ 6136K 5072K cpu1═══ 59═══ 0══ 0:00:00 0.1% prstat/1
═ 2169 urix══════ 56M 8440K sleep══ 59═══ 0══ 0:00:00 0.1% metacity/1
═ 2392 urix════ 6136K 5080K sleep══ 59═══ 0══ 0:00:00 0.0% prstat/1
═ 2175 urix══════ 62M══ 12M sleep══ 59═══ 0══ 0:00:01 0.0% gnome-panel/1
═ 2195 urix══════ 60M══ 10M sleep══ 59═══ 0══ 0:00:00 0.0% mixer_applet2/1
═ 2127 urix════ 2464K 1040K sleep══ 59═══ 0══ 0:00:00 0.0% dsdm/1
═ 2166 urix════ 3616K 2544K sleep══ 59═══ 0══ 0:00:00 0.0% gnome-smproxy/1
═ 2189 urix══════ 54M 6128K sleep══ 59═══ 0══ 0:00:00 0.0% galf-server/1
══ 611 root════ 3656K 2272K sleep══ 59═══ 0══ 0:00:00 0.0% snmpXdmid/2
══ 571 root════ 2216K 1056K sleep══ 59═══ 0══ 0:00:00 0.0% rpc.bootparamd/1
══ 462 root════ 1880K═ 536K sleep══ 59═══ 0══ 0:00:00 0.0% smcboot/1
══ 463 root════ 1872K═ 352K sleep══ 59═══ 0══ 0:00:00 0.0% smcboot/1
══ 464 root════ 1872K═ 368K sleep══ 59═══ 0══ 0:00:00 0.0% smcboot/1
══ 499 root════ 5360K 2024K sleep══ 59═══ 0══ 0:00:00 0.0% htt_server/2
══ 788 root════ 2088K 1328K sleep══ 59═══ 0══ 0:00:00 0.0% init/1
══ 410 root════ 2544K═ 592K sleep══ 59══ ═0══ 0:00:00 0.0% cron/1
══ 423 root════ 2968K 2128K sleep══ 59═══ 0══ 0:00:00 0.0% nscd/24
══ 406 root════ 3944K 1680K sleep══ 59═══ 0══ 0:00:00 0.0% syslogd/15
══ 407 root════ 3840K 1664K sleep══ 59═══ 0══ 0:00:00 0.0% automountd/2
══ 491 root════ 3752K 1496K sleep══ 59═══ 0══ 0:00:00 0.0% utskid/1
══ 328 root══════ 16M 7224K sleep══ 59═══ 0══ 0:00:00 0.0% ns-httpd/59
══ 326 root══════ 12M 6720K sleep══ 59═══ 0══ 0:00:00 0.0% ns-httpd/2
══ 440 root════ 1576K═ 648K sleep══ 59═══ 0══ 0:00:00 0.0% powerd/3
══ 325 root════ 4376K 1184K sleep══ 59═══ 0══ 0:00:00 0.0% uxwdog/1
══ 424 root════ 2384K═ 816K sleep══ 59═══ 0══ 0:00:00 0.0% inetd/1
══ 315 nobody════ 75M══ 63M sleep══ 59═══ 0══ 0:00:00 0.0% ns-slapd/40
PROJID═══ NPROC═ SIZE══ RSS MEMORY═════ TIME═ CPU PROJECT════════════════════
════ 3══════ 21═ 485M═ 120M══ 6.0%══ 0:00:02 0.7% default════════════════════
════ 1═══════ 2 8960K 7200K══ 0.4%══ 0:00:00 0.1% user.root══════════════════
════ 0══════ 90═ 417M═ 234M═══ 12%══ 0:00:04 0.0% system═════════════ ════════

Total: 113 processes, 373 lwps, load averages: 0.02, 0.02, 0.03

и задачи (опция -T):

# prstat -T

══ PID USERNAME═ SIZE══ RSS STATE═ PRI NICE═════ TIME═ CPU PROCESS/NLWP══════
═ 2185 urix══════ 61M══ 11M sleep══ 59═══ 0══ 0:00:02 0.3% gnome-terminal/1
═ 2424 root════ 6136K 5056K cpu0═══ 59═══ 0══ 0:00:00 0.1% prstat/1
═ 2173 urix══════ 71M══ 21M sleep══ 59═══ 0══ 0:00:01 0.1% nautilus/8
═ 2175 urix══════ 62M══ 12M sleep══ 59═══ 0══ 0:00:01 0.0% gnome-panel/1
═ 2169 urix══════ 56M 8440K sleep══ 59═══ 0══ 0:00:00 0.0% metacity/1
═ 2195 urix══════ 60M══ 10M sleep══ 59═══ 0══ 0:00:00 0.0% mixer_applet2/1
═ 2203 root════ 2824K 2128K sleep══ 59═══ 0══ 0:00:00 0.0% bash/1
═ 2189 urix══════ 54M 6128K sleep══ 59═══ 0══ 0:00:00 0.0% galf-server/1
══ 611 root════ 3656K 2272K sleep══ 59═══ 0══ 0:00:00 0.0% snmpXdmid/2
══ 571 root════ 2216K 1056K sleep══ 59═══ 0══ 0:00:00 0.0% rpc.bootparamd/1
══ 462 root════ 1880K═ 536K sleep══ 59═══ 0══ 0:00:00 0.0% smcboot/1
══ 463 root════ 1872K═ 352K sleep══ 59═══ 0═ ═0:00:00 0.0% smcboot/1
══ 464 root════ 1872K═ 368K sleep══ 59═══ 0══ 0:00:00 0.0% smcboot/1
══ 499 root════ 5360K 2024K sleep══ 59═══ 0══ 0:00:00 0.0% htt_server/2
══ 788 root════ 2088K 1328K sleep══ 59═══ 0══ 0:00:00 0.0% init/1
══ 410 root════ 2544K═ 592K sleep══ 59═══ 0══ 0:00:00 0.0% cron/1
══ 423 root════ 2968K 2128K sleep══ 59═══ 0══ 0:00:00 0.0% nscd/24
══ 406 root════ 3944K 1680K sleep══ 59═══ 0══ 0:00:00 0.0% syslogd/15
══ 407 root════ 3840K 1664K sleep══ 59═══ 0══ 0:00:00 0.0% automountd/2
══ 491 root════ 3752K 1496K sleep══ 59═══ 0══ 0:00:00 0.0% utskid/1
══ 328 root══════ 16M 7224K sleep══ 59═══ 0══ 0:00:00 0.0% ns-httpd/59
══ 326 root══════ 12M 6720K sleep══ 59═══ 0══ 0:00:00 0.0% ns-httpd/2
══ 440 root════ 1576K═ 648K sleep══ 59═══ 0══ 0:00:00 0.0% powerd/3
══ 325 root════ 4376K 1184K sleep══ 59═══ 0══ 0:00:00 0.0% uxwdog/1
══ 424 root════ 2384K═ 816K sleep══ 59═══ 0══ 0:00:00 0.0% inetd/1
══ 315 nobody════ 75M══ 63M sleep══ 59═══ 0══ 0:00:00 0.0% ns-slapd/40
══ 292 daemon══ 2424K═ 760K sleep═ ═59═══ 0══ 0:00:00 0.0% rpcbind/1
TASKID═══ NPROC═ SIZE══ RSS MEMORY═════ TIME═ CPU PROJECT════
════ 6══════ 20═ 479M═ 115M══ 5.7%══ 0:00:04 0.5% default═
════ 7═══════ 2 8960K 7184K══ 0.4%══ 0:00:00 0.1% user.root
════ 2═══════ 1═══ 0K═══ 0K══ 0.0%══ 0:00:00 0.0% system
════ 3══════ 33═ 112M══ 63M══ 3.1%══ 0:00:00 0.0% system═
════ 1══════ 56═ 305M═ 171M══ 8.5%══ 0:00:04 0.0% system═


═ Total: 112 processes, 371 lwps, load averages: 0.01, 0.02, 0.03

3. Создадим новый проект с именем test и идентификатором 150 для пользователя urix:

# projadd -U urix -p 150 test

4. Добавим комментарии для вновь созданного проекта:

# projmod -c "Test project for user urix" test

# cat /etc/project

system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::
test:150:Test project for user urix:urix::

5. Войдем под пользователем, используя команду su, и проверим, с какими проектами он ассоциирован:

# su - urix

Sun Microsystems Inc. SunOS 5.10 s10_55 May 2004

bash-2.05b$ projects
default test

6. Теперь создадим новую задачу в проекте test. Система автоматически перенесет пользовательский shell-процесс в вновь созданную задачу:

bash-2.05b$ newtask -v -p test
9

bash-2.05b$ id -p
uid=101(urix) gid=1(other) projid=150(test)

7. Выйдем из только что созданной задачи:

bash-2.05b$ exit

exit

bash-2.05b$ id -p
uid=101(urix) gid=1(other) projid=3(default)

Menu_os: 

Post new comment

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
3 + 4 =
Решите эту простую математическую задачу и введите результат. Например, для 1+3, введите 4.