diff --git a/extra/dist/tarantoolctl.in b/extra/dist/tarantoolctl.in
index 0796f46053586cbab9ca0e63d453b4c1b3ba301a..7228b78ad2d34a24ad5dad7bd6c50afb1d271089 100755
--- a/extra/dist/tarantoolctl.in
+++ b/extra/dist/tarantoolctl.in
@@ -547,8 +547,13 @@ local function start()
         end
         os.exit(1)
     end
-    local old_call = getmetatable(box.cfg).__call
-    getmetatable(box.cfg).__call = function(old_cfg, cfg)
+    local box_cfg_mt = getmetatable(box.cfg)
+    if box_cfg_mt == nil then
+        log.error('box.cfg() is not called in an instance file')
+        os.exit(1)
+    end
+    local old_call = box_cfg_mt.__call
+    box_cfg_mt.__call = function(old_cfg, cfg)
         if old_cfg.pid_file ~= nil and cfg ~= nil and cfg.pid_file ~= nil then
             cfg.pid_file = old_cfg.pid_file
         end
diff --git a/test/app-tap/tarantoolctl.test.lua b/test/app-tap/tarantoolctl.test.lua
index 62a78d6bf344081e88ad916c42e12a6c7c37a823..c1e1490ca1b3c2a430b6d77336eb8afa7ed80007 100755
--- a/test/app-tap/tarantoolctl.test.lua
+++ b/test/app-tap/tarantoolctl.test.lua
@@ -178,12 +178,14 @@ test:plan(8)
 -- must be stopped afterwards
 do
     local dir = fio.tempdir()
-    local code = [[ box.cfg{memtx_memory = 104857600} ]]
-    create_script(dir, 'script.lua', code)
+    create_script(dir, 'script.lua', [[ box.cfg{memtx_memory = 104857600} ]])
+    create_script(dir, 'no_box_cfg.lua', [[ print('Hi!') ]])
 
     local status, err = pcall(function()
         test:test("basic test", function(test_i)
-            test_i:plan(16)
+            test_i:plan(18)
+            check_ok(test_i, dir, 'start', 'no_box_cfg', 1, nil, "Starting instance",
+                     "box.cfg() is not called in an instance file")
             check_ok(test_i, dir, 'start',  'script', 0, nil, "Starting instance")
             tctl_wait_start(dir, 'script')
             check_ok(test_i, dir, 'status', 'script', 0, nil, "is running")