def METHOD_NAME(
    host,  # type: str
    port,  # type: int
    timeout,  # type: float
    max_connection_retries,  # type: int
    request_timeout,  # type: int
):
    # type: (...) -> Union[str, LaunchResult]
    pidfile = Pidfile.load()
    if pidfile and pidfile.alive():
        return LaunchResult(url=pidfile.url, already_running=True)
    devpi_server = ensure_devpi_server()
    # Not proper daemonization, but good enough.
    log = os.path.join(DEVPI_DIR, "log.txt")
    with safe_open(log, "w") as fp:
        process = subprocess.Popen(
            args=devpi_server.launch_args(
                "--host",
                host,
                "--port",
                str(port),
                "--replica-max-retries",
                str(max_connection_retries),
                "--request-timeout",
                str(request_timeout),
            ),
            cwd=DEVPI_DIR,
            preexec_fn=os.setsid,
            stdout=fp.fileno(),
            stderr=subprocess.STDOUT,
        )
    pidfile = Pidfile.record(log=log, pid=process.pid, timeout=timeout)
    if not pidfile:
        try:
            os.kill(process.pid, signal.SIGKILL)
        except OSError as e:
            if e.errno != errno.ESRCH:  # No such process.
                raise
        return log
    return LaunchResult(url=pidfile.url, already_running=False)