### Body

Currently `start_date` is mandatory parameter.
For DAGs with `schedule=None` we can relax this requirement as no scheduling calculation needed so the `start_date` parameter isn't used.

### Committer

- [X] I acknowledge that I am a maintainer/committer of the Apache Airflow project.
from airflow.jobs.backfill_job_runner import BackfillJobRunner
        if not executor and local:
            from airflow.executors.local_executor import LocalExecutor
            executor = LocalExecutor()
        elif not executor:
            from airflow.executors.executor_loader import ExecutorLoader
            executor = ExecutorLoader.get_default_executor()
        from airflow.jobs.job import Job
        job = Job(executor=executor)
        job_runner = BackfillJobRunner(
            job=job,
            dag=self,
            start_date=start_date,
            end_date=end_date,
            mark_success=mark_success,
            donot_pickle=donot_pickle,
            ignore_task_deps=ignore_task_deps,
            ignore_first_depends_on_past=ignore_first_depends_on_past,
            pool=pool,
            delay_on_limit_secs=delay_on_limit_secs,
            verbose=verbose,
            conf=conf,
            rerun_failed_tasks=rerun_failed_tasks,
            run_backwards=run_backwards,
            run_at_least_once=run_at_least_once,
            continue_on_failures=continue_on_failures,
            disable_retry=disable_retry,
        )
        run_job(job=job, execute_callable=job_runner._execute)
    def cli(self):