Причина, по которой вы не выходите из своего сценария, заключается в том, что вызов для выхода находится в обратном порядке. Он выходит из подоболочки, вызываемой для запуска spark, но это не тот процесс, который интерпретирует ваш скрипт ruby.
Вы можете проверить содержимое $? переменная, которая возвращает Process: Status для команды backtick после ее выполнения.
Однако, как предположил Даниэль Питтман, было бы проще проверить, доступен ли исполняемый файл, используя что-то вроде FileTest. Однако вы, вероятно, захотите связать это с проверкой возвращаемого значения на случай, если произойдет какой-то другой, более сложный сбой.