### Summary

If you fail to add `become: true` on an Ubuntu system with systemd, you will quietly receive a list of the `sysv` services without any systemd services. This is due to the service facts module implementing its own separate test for systemd https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/service_facts.py#L224-L234 which quietly ignores a failure.

If it were to use the value of the ansible fact `ansible_service_mgr` instead then it would correctly catch this failure and report the warning.

### Issue Type

Bug Report

### Component Name

service_facts module

### Ansible Version

```console
$ ansible --version
ansible [core 2.12.1]
  config file = None
  configured module search path = ['/Users/jrhett/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /opt/homebrew/Cellar/ansible/5.2.0/libexec/lib/python3.10/site-packages/ansible
  ansible collection location = /Users/jrhett/.ansible/collections:/usr/share/ansible/collections
  executable location = /opt/homebrew/bin/ansible
  python version = 3.10.1 (main, Dec  6 2021, 22:18:13) [Clang 13.0.0 (clang-1300.0.29.3)]
  jinja version = 3.0.3
  libyaml = True
```


### Configuration

```console
$ ansible-config dump --only-changed
(empty)
```


### OS / Environment

Target node is Ubuntu 20.04

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->
```shell
$ ansible -m service_facts <node ip>
```


### Expected Results

`WARNING: Could not find status for all services. Sometimes this is due to insufficient privileges.`

### Actual Results

```console
A quiet success with only sysv services.


52.14.195.85 | SUCCESS => {
    "ansible_facts": {
        "services": {
            "acpid": {
                "name": "acpid",
                "source": "sysv",
                "state": "stopped"
            },
            "apparmor": {
                "name": "apparmor",
                "source": "sysv",
                "state": "stopped"
            },
```
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
module = AnsibleModule(argument_spec=dict(), supports_check_mode=True)
    locale = get_best_parsable_locale(module)
    module.run_command_environ_update = dict(LANG=locale, LC_ALL=locale)
    service_modules = (ServiceScanService, SystemctlScanService, AIXScanService, OpenBSDScanService)
    all_services = {}
    incomplete_warning = False
    for svc_module in service_modules:
        svcmod = svc_module(module)
        svc = svcmod.gather_services()
        if svc is not None:
            all_services.update(svc)
            if svcmod.incomplete_warning:
                incomplete_warning = True
    if len(all_services) == 0:
        results = dict(skipped=True, msg="Failed to find any services. Sometimes this is due to insufficient privileges.")
    else:
        results = dict(ansible_facts=dict(services=all_services))
        if incomplete_warning:
            results['msg'] = "WARNING: Could not find status for all services. Sometimes this is due to insufficient privileges."
    module.exit_json(**results)
if __name__ == '__main__':
    main()