powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / FreeBSD: Выполнение Скрипта перед Запуском Дэмона/Сервиса
4 сообщений из 4, страница 1 из 1
FreeBSD: Выполнение Скрипта перед Запуском Дэмона/Сервиса
    #39880479
Фотография CrazyMihey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благоприятной Кармы Всем, читающим этот Вопрос!
Подскажите, пожалуйста, Знающие Админы, как осуществить Subj при НижеОписанных Условиях.
Задача следующая: Запускается некий Дэмон, для Примера, назовём Его «hostapd». Непосредственно перед самым Запуском (Точнее только на: start, restart и reload) хочу выполнять Свой Скриптик, который призван подрихтовать некий Конфиг, назовём Его, к примеру, «/etc/hostapd.conf». Осуществить Запуск необходимо из «/etc/rc.conf», не перекорячивая при этом «/etc/rc.d/hostapd» или какие-либо другие Файлы из «/etc/*». Естественно, «/etc/rc.conf» и «/etc/hostapd.conf» будут изменены, но Они «не входят» в Поставку FreeBSD и Их редактирование не вызывает распухания Камасутры при выполнении «make installworld».
В Документации и Статьях по Системе «rc.d» в основном описывается Процесс создания Собственного Дэмона, но в данном случае Задача стоит другая: Приколхозить Свой Скрипт на ЗаПуск/ПереЗаПуск уже существующего.
Собственно, сам Вопрос состоит в том, как докопаться до Переменных, вроде «start_precmd», «reload_precmd» и «restart_precmd» из Конфигурационного Файла «/etc/rc.conf», не изменяя другие Файлы? Или Я что-то НеДоПонимаю?
Пока сделал так «/etc/rc.conf»:
Код: sql
1.
2.
hostapd_enable="Yes"
hostapd_flags="${hostapd_flags}$([ -x /root/bin/CheckHostApD ] && /root/bin/CheckHostApD >/dev/null 2>&1)"

Но осознаю, что Это Решение в Корне неправильное и жутко костыльное. Покопавшись во Фряшных Скриптах, обнаружил, что «/etc/rc.conf» может подцепляться везде и всюду, т.е. Мой Скрипт будет выполняться десятки раз впустую. Скрипт оптимизировал, конечно, но это всё равно не Решение.
Также была осуществлена попытка добавления в Конфиг «/etc/hostapd.conf» Динамических Параметров вида:
Код: sql
1.
channel="$(sed -E -e "…" "/etc/rc.conf")"

Но Это не сработало вообще. Видимо, «/etc/hostapd.conf» читается как «Обычный Файл Настроек "Param=Value"» и не прогоняется через SH (Может туда Шебанг надо было запихнуть?).
Заранее Благодарю Всех Откликнувшихся!
P.S. НеОбХодимость периодического «make installworld» и НеТрогания «/etc/*» — Вопрос Риторический и Тема для Жирного ХолиВара, который не хотелось бы разворачивать здесь.
...
Рейтинг: 0 / 0
FreeBSD: Выполнение Скрипта перед Запуском Дэмона/Сервиса
    #39880719
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваш скрипт, который надо выполнить перед n-ным демоном , оформите как запускающий скрипт вашего демона, и пропишите его в секции require того демона, который надо запустить после него.
Например, мне надо монтировать пулы с разными именами в разные точки монтирования в систему и если система перестартовала, то он должен быть смонтирован...
Поэтому у меня скрипт стартует в виде демона ZZ после запуска сети и системы авторизации, т.е. в rc.conf вставляем
zz_enable="YES"
zz_pool="имя пула"
zz_mount="точка монтирования"

поскольку скрипт не системный, то кладем его в /usr/local/etc/rc.d/

#!/bin/sh
# PROVIDE: ZZ
# REQUIRE: LOGIN NETWORKING SERVERS
# KEYWORD: shutdown

. /etc/rc.subr

name="zz"
rcvar=`set_rcvar`


: ${zz_enable="NO"}

pidfile="/var/run/${name}.pid"

start_cmd()
{
zpool_name=${zz_pool}
mount_point=${zz_mount}
/sbin/zpool import -o altroot=$mount_point/$zpool_name $zpool_name
echo Mount $zpool_name "in " $mount_point/$zpool_name
}

stop_cmd()
{
zpool_name=${zz_pool}
/sbin/zpool export $zpool_name
echo Unmount $zpool_name
}

status_cmd()
{
}


start_cmd="start_cmd"
stop_cmd="stop_cmd"
status_cmd="status_cmd"

load_rc_config $name
run_rc_command "$1"
...
Рейтинг: 0 / 0
FreeBSD: Выполнение Скрипта перед Запуском Дэмона/Сервиса
    #39880739
Фотография CrazyMihey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Orlov…и пропишите его в секции require того демона, который надо запустить после него.…Я не хочу менять «/etc/rc.d/hostapd», дабы не схватить НеПриятностей при ОбНовлении («make installworld») или ПереЕзде/ПереУстановке на Другой Сервак.
Похоже, всё-таки придётся писать Своего Дэмона в «/usr/local/etc/rc.d/» и в конце через Точку «.» подцепить уже Существующий из «/etc/rc.d/», только вижу, что придётся копировать Комменты типа:
Код: php
1.
2.
3.
# PROVIDE: …
# REQUIRE: …
# KEYWORD: …

, иначе «find_local_scripts_new()» из «/etc/rc.subr» не воспримет Скрипт за Дэмона. Возможно, надо копировать ещё что-то.
Sergey Orlov
Код: php
1.
2.
3.
status_cmd()
{
}

А разве тут не должно быть что-то типа «/usr/local/bin/zfs-stats -M -A»?
...
Рейтинг: 0 / 0
FreeBSD: Выполнение Скрипта перед Запуском Дэмона/Сервиса
    #39881006
Sergey Orlov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CrazyMihey А разве тут не должно быть что-то типа «/usr/local/bin/zfs-stats -M -A»?
А мне не нужен вывод статус, вот и пустая...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / FreeBSD: Выполнение Скрипта перед Запуском Дэмона/Сервиса
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]