def really_run(task, root, sandbox, task_id=None, user=None, prebound_ports=None, chroot=None, daemon=False): prebound_ports = prebound_ports or {} missing_ports = set(task.ports()) - set(prebound_ports.keys()) if missing_ports: app.error('ERROR! Unbound ports: %s' % ' '.join(port for port in missing_ports)) task_runner = TaskRunner(task.task, root, sandbox, task_id=task_id, user=user, portmap=prebound_ports, chroot=chroot) if daemon: print('Daemonizing and starting runner.') try: log.teardown_stderr_logging() daemonize() except Exception as e: print("Failed to daemonize: %s" % e) sys.exit(1) try: task_runner.run() except KeyboardInterrupt: print('Got keyboard interrupt, killing job!') task_runner.close_ckpt() task_runner.kill()
def proxy_main(args, opts): assert opts.thermos_json and os.path.exists(opts.thermos_json) assert opts.sandbox assert opts.checkpoint_root thermos_task = get_task_from_options(opts) prebound_ports = opts.prebound_ports missing_ports = set(thermos_task.ports()) - set(prebound_ports) if missing_ports: app.error('ERROR! Unbound ports: %s' % ' '.join(port for port in missing_ports)) task_runner = TaskRunner(thermos_task.task, opts.checkpoint_root, opts.sandbox, task_id=opts.task_id, user=opts.setuid, portmap=prebound_ports, chroot=opts.chroot, planner_class=CappedTaskPlanner) for sig in (signal.SIGUSR1, signal.SIGUSR2): signal.signal(sig, functools.partial(runner_teardown, task_runner)) try: task_runner.run() except TaskRunner.InternalError as err: app.error('Internal error: %s' % err) except TaskRunner.InvalidTask as err: app.error(str(err)) except TaskRunner.StateError: app.error('Task appears to already be in a terminal state.') except KeyboardInterrupt: runner_teardown(task_runner)
def proxy_main(args, opts): assert opts.thermos_json and os.path.exists(opts.thermos_json) assert opts.sandbox assert opts.checkpoint_root thermos_task = get_task_from_options(opts) prebound_ports = opts.prebound_ports missing_ports = set(thermos_task.ports()) - set(prebound_ports) if missing_ports: log.error('ERROR! Unbound ports: %s' % ' '.join(port for port in missing_ports)) sys.exit(INTERNAL_ERROR) if opts.setuid: user = opts.setuid else: user = getpass.getuser() # if we cannot get the uid, this is an unknown user and we should fail try: pwd.getpwnam(user).pw_uid except KeyError: log.error('Unknown user: %s' % user) sys.exit(UNKNOWN_USER) task_runner = TaskRunner( thermos_task.task, opts.checkpoint_root, opts.sandbox, task_id=opts.task_id, user=opts.setuid, portmap=prebound_ports, chroot=opts.chroot, planner_class=CappedTaskPlanner, hostname=opts.hostname, process_logger_destination=opts.process_logger_destination, process_logger_mode=opts.process_logger_mode, rotate_log_size_mb=opts.rotate_log_size_mb, rotate_log_backups=opts.rotate_log_backups, preserve_env=opts.preserve_env, mesos_containerizer_path=opts.mesos_containerizer_path, container_sandbox=opts.container_sandbox) for sig in (signal.SIGUSR1, signal.SIGUSR2): signal.signal(sig, functools.partial(runner_teardown, task_runner)) try: task_runner.run() except TaskRunner.InternalError as err: log.error('Internal error: %s' % err) sys.exit(INTERNAL_ERROR) except TaskRunner.InvalidTask as err: log.error('Invalid task: %s' % err) sys.exit(INVALID_TASK) except TaskRunner.StateError as err: log.error('Checkpoint error: %s' % err) sys.exit(TERMINAL_TASK) except Process.UnknownUserError as err: log.error('User ceased to exist: %s' % err) sys.exit(UNKNOWN_USER) except KeyboardInterrupt: log.info('Caught ^C, tearing down runner.') runner_teardown(task_runner) except Exception as e: log.error('Unknown exception: %s' % e) for line in traceback.format_exc().splitlines(): log.error(line) sys.exit(UNKNOWN_ERROR)