Запуск/остановка экземпляра
Lua-приложение выполняется Tarantool’ом, тогда как файл экземпляра выполняется Tarantool-скриптом tarantoolctl
.
Вот что делает tarantoolctl
при вводе следующей команды:
$ tarantoolctl start <имя_экземпляра>
Считывает и разбирает аргументы командной строки. В нашем случае последний аргумент содержит имя экземпляра.
Считывает и разбирает собственный конфигурационный файл. Этот файл содержит параметры
tarantoolctl
по умолчанию – такие как путь до директории, в которой располагаются экземпляры.Когда
tarantoolctl
вызывается с root-правами, он ищет конфигурационный файл в/etc/default/tarantool
. Если вызовtarantool
производит локальный пользователь, сначала он ищет конфигурационный файл в текущей директории ($PWD/.tarantoolctl
), а затем в домашней директории текущего пользователя ($HOME/.config/tarantool/tarantool
). Если конфигурационный файл не найден,tarantoolctl
принимает встроенные параметры по умолчанию.Ищет файл экземпляра в директории, где располагаются экземпляры, например, в
/etc/tarantool/instances.enabled
.tarantoolctl
строит путь до файла экземпляра следующим образом: «путь до директории с экземплярами» + «имя экземпляра» + «.lua».Переопределяет функцию box.cfg{}, чтобы предобработать ее параметры и сделать так, чтобы пути к экземплярам указывали на пути, прописанные в конфигурационном файле
tarantoolctl
. Например, если в конфигурационном файле указано, что рабочей директорией экземпляра является/var/tarantool
, то новая реализацияbox.cfg{}
сделает так, чтобы параметр work_dir вbox.cfg{}
имел значение/var/tarantool/<имя_экземпляра>
, независимо от того, какой путь указан в самом файле экземпляра.Создает так называемый «файл для управления экземпляром». Это Unix-сокет с прикрепленной к нему Lua-консолью. В дальнейшем
tarantoolctl
использует этот файл для получения состояния экземпляра, отправки команд и т.д.Задает значение переменной окружения TARANTOOLCTL = „true“. Это позволит пользователю понять, что экземпляр был запущен
tarantoolctl
.Наконец, использует Lua-команду
dofile
для выполнения файла экземпляра.
При запуске экземпляра с помощью инструментария systemd
указанным ниже способом (имя экземпляра – my_app
):
$ systemctl start tarantool@my_app
$ ps axuf|grep my_app
taranto+ 5350 1.3 0.3 1448872 7736 ? Ssl 20:05 0:28 tarantool my_app.lua <running>
…на самом деле вызывается tarantoolctl
– так же, как и в случае tarantoolctl start my_app
.
Для проверки файла экземпляра на наличие синтаксических ошибок перед запуском экземпляра my_app
используйте команду:
$ tarantoolctl check my_app
Для включения автоматической загрузки экземпляра my_app
при запуске всей системы используйте команду:
$ systemctl enable tarantool@my_app
Для остановки работающего экземпляра my_app
используйте команду:
$ tarantoolctl stop my_app
$ # - ИЛИ -
$ systemctl stop tarantool@my_app
Для перезапуска (т.е. остановки и запуска) работающего экземпляра my_app
используйте команду:
$ tarantoolctl restart my_app
$ # - ИЛИ -
$ systemctl restart tarantool@my_app
Иногда бывает необходимо запустить Tarantool локально – например, для тестирования. Давайте настроим локальный экземпляр, запустим его и будем мониторить с помощью tarantoolctl
.
Сперва создадим директорию-песочницу по следующему пути:
$ mkdir ~/tarantool_test
…и поместим конфигурационный файл с параметрами tarantoolctl
по умолчанию в $HOME/.config/tarantool/tarantool
. Содержимое файла будет таким:
default_cfg = {
pid_file = "/home/user/tarantool_test/my_app.pid",
wal_dir = "/home/user/tarantool_test",
snap_dir = "/home/user/tarantool_test",
vinyl_dir = "/home/user/tarantool_test",
log = "/home/user/tarantool_test/log",
}
instance_dir = "/home/user/tarantool_test"
Примечание
- Указывайте полный путь к домашней директории пользователя вместо «~/».
- Опустите параметр
username
. Обычно, когда запуск производит локальный пользователь, уtarantoolctl
нет разрешения на смену текущего пользователя. Экземпляр будет работать с пользователем „admin“.
Далее создадим файл экземпляра ~/tarantool_test/my_app.lua
. Содержимое файла будет таким:
box.cfg{listen = 3301}
box.schema.user.passwd('Gx5!')
box.schema.user.grant('guest','read,write,execute','universe')
fiber = require('fiber')
box.schema.space.create('tester')
box.space.tester:create_index('primary',{})
i = 0
while 0 == 0 do
fiber.sleep(5)
i = i + 1
print('insert ' .. i)
box.space.tester:insert{i, 'my_app tuple'}
end
Проверим наш файл экземпляра, сперва запустив его без tarantoolctl
:
$ cd ~/tarantool_test
$ tarantool my_app.lua
2017-04-06 10:42:15.762 [54085] main/101/my_app.lua C> version 1.7.3-489-gd86e36d5b
2017-04-06 10:42:15.763 [54085] main/101/my_app.lua C> log level 5
2017-04-06 10:42:15.764 [54085] main/101/my_app.lua I> mapping 268435456 bytes for tuple arena...
2017-04-06 10:42:15.774 [54085] iproto/101/main I> binary: bound to [::]:3301
2017-04-06 10:42:15.774 [54085] main/101/my_app.lua I> initializing an empty data directory
2017-04-06 10:42:15.789 [54085] snapshot/101/main I> saving snapshot `./00000000000000000000.snap.inprogress'
2017-04-06 10:42:15.790 [54085] snapshot/101/main I> done
2017-04-06 10:42:15.791 [54085] main/101/my_app.lua I> vinyl checkpoint done
2017-04-06 10:42:15.791 [54085] main/101/my_app.lua I> ready to accept requests
insert 1
insert 2
insert 3
<...>
Запустим экземпляр Tarantool’а с помощью tarantoolctl
:
$ tarantoolctl start my_app
В консоли должны появиться сообщения о том, что экземпляр запущен. Затем выполним следующую команду:
$ ls -l ~/tarantool_test/my_app
В консоли должны появиться .snap-файл и .xlog-файл. Затем выполним следующую команду:
$ less ~/tarantool_test/log/my_app.log
В консоли должно отобразиться содержимое файла журнала для приложения my_app
, в том числе сообщения об ошибках, если они были. Затем выполним серию команд:
$ tarantoolctl enter my_app
tarantool> box.cfg{}
tarantool> console = require('console')
tarantool> console.connect('localhost:3301')
tarantool> box.space.tester:select({0}, {iterator = 'GE'})
В консоли должны появиться несколько кортежей, которые создало приложение my_app
.
Теперь остановим приложение my_app
. Корректный способ остановки – это использовать``tarantoolctl``:
$ tarantoolctl stop my_app
Последний шаг – удаление тестовых данных.
$ rm -R tarantool_test