为什么我的 systemd 服务无法在启动时启动,但可以手动启动?

Xan*_*ano 8 centos systemd

我编写了一个 systemd 服务,以便在机器启动时启动无线接入点。我的问题是,机器启动时它实际上并未启动,我似乎无法找出原因。手动启动服务效果很好。

\n\n

我的wap.service系统单元文件:

\n\n
[Unit]\nDescription=Enable the Wireless Access Point\nRequires=dnsmasq.service iptables.service NetworkManager.service\nBefore=dnsmasq.service\nAfter=iptables.service NetworkManager.service\n\n[Service]\nType=oneshot\nRemainAfterExit=true\nExecStart=/project/wap.sh\nTimeoutStartSec=0\n\n[Install]\nWantedBy=default.target\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

/project/wap.sh(大括号是 Ansible/Jinja2 变量替换):

\n\n
[Unit]\nDescription=Enable the Wireless Access Point\nRequires=dnsmasq.service iptables.service NetworkManager.service\nBefore=dnsmasq.service\nAfter=iptables.service NetworkManager.service\n\n[Service]\nType=oneshot\nRemainAfterExit=true\nExecStart=/project/wap.sh\nTimeoutStartSec=0\n\n[Install]\nWantedBy=default.target\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

相关/usr/lib/systemd/systemd --test --system --unit=default.target输出:

\n\n
    -> Unit wap.service:\n        Description: Enable the Wireless Access Point\n        Instance: n/a\n        Unit Load State: loaded\n        Unit Active State: inactive\n        Inactive Exit Timestamp: n/a\n        Active Enter Timestamp: n/a\n        Active Exit Timestamp: n/a\n        Inactive Enter Timestamp: n/a\n        GC Check Good: no\n        Need Daemon Reload: no\n        Transient: no\n        Slice: system.slice\n        CGroup: n/a\n        CGroup realized: no\n        CGroup mask: 0x0\n        CGroup members mask: 0x0\n        Name: wap.service\n        Fragment Path: /etc/systemd/system/wap.service\n        Requires: dnsmasq.service\n        Requires: NetworkManager.service\n        Requires: basic.target\n        Requires: iptables.service\n        Wants: system.slice\n        WantedBy: multi-user.target\n        Conflicts: shutdown.target\n        Before: dnsmasq.service\n        Before: multi-user.target\n        Before: shutdown.target\n        After: systemd-journald.socket\n        After: iptables.service\n        After: NetworkManager.service\n        After: system.slice\n        After: basic.target\n        References: systemd-journald.socket\n        References: iptables.service\n        References: NetworkManager.service\n        References: system.slice\n        References: dnsmasq.service\n        References: shutdown.target\n        References: basic.target\n        ReferencedBy: multi-user.target\n        StopWhenUnneeded: no\n        RefuseManualStart: no\n        RefuseManualStop: no\n        DefaultDependencies: yes\n        OnFailureJobMode: replace\n        IgnoreOnIsolate: no\n        IgnoreOnSnapshot: no\n        Service State: dead\n        Result: success\n        Reload Result: success\n        PermissionsStartOnly: no\n        RootDirectoryStartOnly: no\n        RemainAfterExit: yes\n        GuessMainPID: yes\n        Type: oneshot\n        Restart: no\n        NotifyAccess: none\n        NotifyState: unknown\n        KillMode: control-group\n        KillSignal: SIGTERM\n        SendSIGKILL: yes\n        SendSIGHUP:  no\n        UMask: 0022\n        WorkingDirectory: /\n        RootDirectory: /\n        NonBlocking: no\n        PrivateTmp: no\n        PrivateNetwork: no\n        PrivateDevices: no\nLoaded units and determined initial transaction in 75ms.        ProtectHome: no\n        ProtectSystem: no\n\n        IgnoreSIGPIPE: yes\n        LimitNOFILE: 1024 4096\n        StandardInput: null\n        StandardOutput: journal\n        StandardError: inherit\n        SyslogFacility: daemon\n        SyslogLevel: info\n        -> ExecStart:\n            Command Line: /project/wap.sh\n
Run Code Online (Sandbox Code Playgroud)\n\n

重启后服务状态:

\n\n
$ sudo service wap status -l\nRedirecting to /bin/systemctl status  -l wap.service\n\xe2\x97\x8f wap.service - Enable the Wireless Access Point\n   Loaded: loaded (/etc/systemd/system/wap.service; enabled; vendor preset: disabled)\n   Active: inactive (dead)\n
Run Code Online (Sandbox Code Playgroud)\n\n

手动启动后服务状态:

\n\n
$ sudo service wap start\nRedirecting to /bin/systemctl start wap.service\n$ sudo service wap status -l\nRedirecting to /bin/systemctl status  -l wap.service\n\xe2\x97\x8f wap.service - Enable the Wireless Access Point\n   Loaded: loaded (/etc/systemd/system/wap.service; enabled; vendor preset: disabled)\n   Active: active (exited) since do 2019-09-26 12:10:40 BST; 6s ago\n  Process: 8589 ExecStart=/project/wap.sh (code=exited, status=0/SUCCESS)\n Main PID: 8589 (code=exited, status=0/SUCCESS)\n\nsep 26 12:10:40 localhost.localdomain systemd[1]: Starting Enable the Wireless Access Point...\nsep 26 12:10:40 localhost.localdomain wap.sh[8589]: Redirecting to /bin/systemctl restart hostapd.service\nsep 26 12:10:40 localhost.localdomain systemd[1]: Started Enable the Wireless Access Point.\n
Run Code Online (Sandbox Code Playgroud)\n\n

journalctl输出:

\n\n
$ journalctl -u wap\n-- No entries --\n
Run Code Online (Sandbox Code Playgroud)\n\n

我已确认wap.sh在机器启动时永远不会运行,但我无法在系统日志中找到有关此服务的任何信息,例如尝试启动该服务。

\n\n

太长了;我的服务应该在启动时启动,但没有启动,我不明白为什么。

\n

小智 8

也许就像这样简单?:

systemctl 启用 wap.service