LINUX.ORG.RU
ФорумAdmin

Непонятности с LXC. Изоляция сервиса.

 ,


0

1

Всем привет!

Нужно сделать изолированную копию астериск. На хосте где уже собран, и работает астериск, поднял lxc контейнер, и в нем поднял второй экземпляр asterisk.

Но есть неприятный момент. Когда выключается или рестартуется asterisk на хосте, asterisk в контейнере падает. Сделал другого пользователя для астериска в контейнере, переименовал каталоги, чтобы было отлично от хоста, проблема не исчезла.

Когда вырубается астериск на хосте, в контейнере астериск успевает написать:

[Jun 27 06:54:08] VERBOSE[205] asterisk.c: Asterisk cleanly ending (0).
[Jun 27 06:54:08] VERBOSE[205] asterisk.c: Executing last minute cleanups
[Jun 27 06:54:08] VERBOSE[205] manager.c: Manager unregistered action DBGet
[Jun 27 06:54:08] VERBOSE[205] manager.c: Manager unregistered action DBPut
[Jun 27 06:54:08] VERBOSE[205] manager.c: Manager unregistered action DBDel
[Jun 27 06:54:08] VERBOSE[205] manager.c: Manager unregistered action DBDelTree

Почему у работы asterisk в контейнере присутствует зависимость от работы asterisk на хосте?
Как можно этого избежать?

Помедитировав, предположу, что контейнерный астриск как-то зависит от какой-то базы хостового астериска.

leonidko ★★★★
()
Ответ на: комментарий от BOOBLIK

нет, в контейнере не настроена связка astera s БД

borschov
() автор топика

Вангую, что инит-скрипт на хосте делает killall, стреляя процесс в контейнере

slowpony ★★★★★
()
Ответ на: комментарий от leonidko

Когда запускаю так (контейнер):

/usr/sbin/asterisk_pr -vvvvvv -g -dddddd -c

то работает — при рестарсте,стопе хостового астера не подает.
но нет управления сервисом.
изменил init.d скрипт с учетом новых каталогов, сделал юнит системд. все равно - падает. что просто инит скриптом запускаешь, что системд.

borschov
() автор топика

Если посмотреть init.d скрипт

stop() {
        # Stop daemons.
        echo "Shutting down Asterisk: "

        ## this is the nice way to stop asterisk ... initiate the shutdown from itself
	## deactivated because its suspected to disturb the logger .... 6.6.07
	# if  [ ! "`pgrep asterisk`" ]; then echo "already stopped!"; exit 0; fi
        # for ast_stop_cmd in "stop when convenient" "stop gracefully" "stop now"; do
        #         if [ ! "`pgrep asterisk`" ]; then
        #                 break                   # when theres no process skip the addtional ast-stop
        #         else                            # otherwise send asterisk the stop commands
        #                 echo -n "executing command: $ast_stop_cmd "
        #                 for each in `seq 1 10`; do
        #                         $AST_BIN -rx "$ast_stop_cmd" > /dev/null 2>&1
        #                         echo -n "."
        #                         sleep 1
        #                         if [ ! "`pgrep asterisk`" ]; then echo -n " stopped"; break; fi
        #                 done
        #                 echo
        #         fi
        # done

        killproc asterisk
        skill asterisk
        
	echo -n "Asterisk shutdown: "
        if  [ ! "`pgrep asterisk`" ]; then
                                success
                        else
                                failure
                                fi
        echo
}
Как по мне все становится понятно killproc asterisk имена то и в контейнере и на хосте одинаковые. Можно переделать скрипт чтоб килял по pid

pvvking ★★
()
Ответ на: комментарий от pvvking

killproc asterisk
skill asterisk

А потом они говорят, что systemd не нужно.

anonymous
()

Решил сделать старт asterisk в контейнере от отличного пользователя, сделал копии каталогов и т.д. Сделал юнит системд:

[Unit]
Description=Asterisk Sip-Proxy
After=network.target

[Service]
User=asterisk_pr
Group=asterisk_pr
Environment=HOME=/var/lib/asterisk_pr
WorkingDirectory=/var/lib/asterisk_pr
ExecStart=/usr/sbin/asterisk_pr -f -C /etc/asterisk_pr/asterisk.conf
ExecStop=/usr/sbin/asterisk_pr -rx 'core stop now'
ExecReload=/usr/sbin/asterisk_pr -rx 'core reload'

[Install]
WantedBy=multi-user.target

Все прекрасно, юнит стартует asterisk_pr, но файлы asterisk.ctl и asterisk.pid не создаются в каталоге /var/rub/asterisk_pr как указано в asterisk.conf. Как сделать чтобы asterisk.ctl и asterisk.pid создавались где надо? В юните или в инит-скрипте?

borschov
() автор топика
Ответ на: комментарий от borschov

Пришлось делать костыль в виде дополнительного юнита, который запускается Before=asterisk_pr.service, и создает каталог /var/run/asterisk_pr, и выставляет на него права chown -R asterisk_pr:asterisk_pr /var/run/asterisk_pr. Так работает. Понятно, что криво.

borschov
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.