Пользователи могут использовать его для изменения групп, предполагая, что они находятся в одной из этих групп.
Скажите, что я нахожусь в следующих группах:
$ groups
saml vboxusers jupiter newgrp
И у меня есть файл:
$ ls -l | grep afile
-rw-rw-r-- 1 saml saml 0 Oct 10 11:29 afile
таким образом, я изменяю группу этого файла как so:L
$ chown saml.newgrp afile
$ ls -l | grep afile
-rw-rw-r-- 1 saml newgrp 0 Oct 10 11:29 afile
Можно также использовать chown
как это:
$ chown .saml afile
$ ls -l|grep afile
-rw-rw-r-- 1 saml saml 0 Oct 10 11:29 afile
Так как вы используете Debian, возможный способ сделать это - использовать встроенную технику apts. Apt может быть настроен на выполнение скрипта при обновлении.
Смотрите, например, пакет apt-listchanges
, который "является инструментом для демонстрации того, что было изменено в новой версии пакета Debian по сравнению с версией, установленной в настоящее время в системе", в частности, путём показа новых записей в журнале изменений. Этот пакет включает скрипт /etc/apt/apt.conf.d/20listchanges
, который apt запускается при обновлении. Содержимое этого скрипта во всей его полноте.
DPkg::Pre-Install-Pkgs { "/usr/bin/apt-listchanges --apt || test $? -ne 10"; };
DPkg::Tools::Options::/usr/bin/apt-listchanges::Version "2";
В этих сценариях обычно используются привязки apt на Perl или Python. /usr/bin/apt-listchanges
является Python-скриптом и использует Python-связки.
Смотрите, например, немного эскизную документацию по Debian Wiki, AptConf.
Вы можете заставить dpkg
выполнить команду до или после операций управления пакетами. Передайте опцию - до вызова = КОМАНДА
или - после вызова = КОМАНДА
; команда выполняется с переменной среды DPKG_HOOK_ACTION
, установленной в соответствии с характером действия. Это не очень удобно, потому что эти хуки запускаются один раз при вызове dpkg
, а не один раз для каждого пакета, и они не предоставляют способа узнать, что процесс dpkg
будет делать или делал. . Косвенный способ узнать, что произошло, - это зарегистрировать состояние интересующего вас пакета (ов) до и после действия и вызвать ваше настраиваемое действие, если состояние изменилось. Вы также можете получить эту информацию, проанализировав журналы ( /var/log/dpkg.log
).
Более конкретным решением было бы подключиться к стандартному механизму, который Debian предоставляет для решения вашей проблемы. Пакет nginx
(точнее nginx-light
или nginx-full
) вызывает invoke-rc.d nginx start
как часть своего сценарий post-install ( postinst
) и invoke-rc.d nginx stop
как часть сценария предварительного удаления ( prerm
). Замените команду invoke-rc.d
на команду, адаптированную для runit и вызывающей sv
; вы можете использовать для этого dpkg-divert
:
dpkg-divert --add --rename --divert /usr/sbin/invoke-rc.d.sysvinit /usr/sbin/invoke-rc.d
ln -s invoke-rc.d.runit /usr/sbin/invoke-rc.d
В качестве альтернативы поместите свою собственную копию invoke-rc.d
, адаптированную к sv
раньше, чем / usr / sbin
в пути, например в / usr / local / sbin
.
Сценарий /usr/sbin/invoke-rc.d.runit
или /usr/sbin/invoke-rc.d
должен позаботиться о реализации вызова -rc.d
интерфейс :
invoke-rc.d СЕРВИС ДЕЙСТВИЕ
, где ДЕЙСТВИЕ является одним из начало
, остановить
, перезапустить
, принудительно перезагрузить
, перезагрузить
. - quiet
(единственный, который, как я вижу, используется сценариями обслуживания пакетов в моей системе, я не провел исчерпывающий поиск всех пакетов Debian). /usr/sbin/policy-rc.d
, как описано на странице руководства, если вам это нужно (например,чтобы избежать запуска служб в chroot или контейнере). Если вы хотите управлять только Nginx с помощью runit, запустите свой invoke-rc.d
стандартный, если имя службы не nginx
.
Учитывая все обстоятельства, если вы просто хотите управлять Nginx с помощью Runit, то перенаправление (или даже редактирование - это файл конфигурации) /etc/init.d/nginx
кажется самым простым способом. Используйте существующий сценарий в качестве отправной точки и замените вызовы start-stop-daemon
соответствующими вызовами nv
.