<!--

Welcome to Apache Airflow!  For a smooth issue process, try to answer the following questions.
Don't worry if they're not all applicable; just try to include what you can :-)

If you need to include code snippets or logs, please put them in fenced code
blocks.  If they're super-long, please use the details tag like
<details><summary>super-long log</summary> lots of stuff </details>

Please delete these comment blocks before submitting the issue.

-->

**Description**
- The `airflow serve_logs` command has been removed from the CLI as of 2.0.0
- When using `CeleryExecutor`, the `airflow celery worker` command runs the `serve_logs` process in the background.
- We should do the same with `airflow scheduler` command when using `LocalExecutor` or `SequentialExecutor`
 
<!-- A short description of your feature -->

**Use case / motivation**
- This will allow for viewing task logs in the UI when using `LocalExecutor` or `SequentialExecutor` without elasticsearch configured.

<!-- What do you want to happen?

Rather than telling us how you might implement this solution, try to take a
step back and describe what you are trying to achieve.

-->

**Are you willing to submit a PR?**
Yes. Working with @dimberman .

<!--- We accept contributions! -->

**Related Issues**
- https://github.com/apache/airflow/issues/14222
- https://github.com/apache/airflow/issues/13331

<!-- Is there currently another issue associated with this? -->

airflow/cli/cli_parser.py
"""Get long option from Arg.flags"""
        return arg.flags[0] if len(arg.flags) == 1 else arg.flags[1]
    positional, optional = partition(lambda x: x.flags[0].startswith("-"), args)
    yield from positional
    yield from sorted(optional, key=lambda x: get_long_option(x).lower())
def _add_command(
    subparsers: argparse._SubParsersAction, sub: CLICommand  # py
) -> None:
    sub_proc = subparsers.add_parser(
        sub.name, help=sub.help, description=sub.description or sub.help, epilog=sub.epilog
    )
    sub_proc.formatter_class = RawTextHelpFormatter
    if isinstance(sub, GroupCommand):
        _add_group_command(sub, sub_proc)
    elif isinstance(sub, ActionCommand):
        _add_action_command(sub, sub_proc)
    else:
        raise AirflowException("Invalid command definition.")
def _add_action_command(sub: ActionCommand, sub_proc: argparse.ArgumentParser) -> None:
    for arg in _sort_args(sub.args):
        arg.add_to_parser(sub_proc)
    sub_proc.set_defaults(func=sub.func)
def _add_group_command(sub: GroupCommand, sub_proc: argparse.ArgumentParser) -> None:
    subcommands = sub.subcommands
    sub_subparsers = sub_proc.add_subparsers(dest="subcommand", metavar="COMMAND")
    sub_subparsers.required = True
    for command in sorted(subcommands, key=lambda x: x.name):
        _add_command(sub_subparsers, command)