在 systemd 中,
WantedBy
指定了当服务被启用(使用
systemctl enable
)时,该服务应该被链接到哪个目标(target)。理解
WantedBy=multi-user.target
和
WantedBy=default.target
之间的区别,需要先了解这两个目标的含义和用途。
multi-user.target
- 含义:
multi-user.target
类似于传统的 SysV init 的运行级别 3。它表示系统已经启动并处于多用户模式,通常不包含图形界面。这适用于服务器或不需要图形用户界面的系统。 - 用途:当你希望服务在系统进入多用户模式时启动,例如网络服务、数据库服务等,应该使用
WantedBy=multi-user.target
。
default.target
- 含义:
default.target
是一个符号链接,指向系统的默认启动目标。这个默认目标可以根据系统配置指向不同的实际目标,如multi-user.target
或graphical.target
(运行级别 5,相当于包含图形界面的多用户模式)。 - 用途:使用
WantedBy=default.target
意味着服务将在系统启动时根据default.target
所指向的实际目标启动。如果default.target
指向graphical.target
,则服务会在图形界面启动时启动;如果指向multi-user.target
,则在多用户模式下启动。
主要区别
-
具体性:
multi-user.target
是一个具体的目标,明确表示服务将在多用户模式下启动。default.target
是一个更抽象的目标,依赖于系统的默认配置,可以指向不同的实际目标。
-
灵活性:
- 使用
WantedBy=multi-user.target
更加明确,适用于那些在多用户模式下运行且不依赖图形界面的服务。 - 使用
WantedBy=default.target
则更具灵活性,适用于希望服务在系统默认启动模式下运行,而不关心具体是多用户模式还是图形界面模式的情况。
- 使用
-
系统兼容性:
- 如果系统的
default.target
经常变动或根据不同的部署环境指向不同的目标,使用WantedBy=default.target
可以减少需要修改服务单元文件的情况。 - 如果你需要确保服务在特定的运行级别启动,使用具体的目标如
multi-user.target
更为可靠。
- 如果系统的
示例
假设你有一个名为 myservice.service
的服务单元文件:
使用 multi-user.target
:
[Install]
WantedBy=multi-user.target
- 效果:
myservice
会在系统进入多用户模式时启动,无论default.target
指向什么。
使用 default.target
:
[Install]
WantedBy=default.target
- 效果:
myservice
会在系统启动到default.target
指向的目标时启动,这可能是multi-user.target
或graphical.target
,具体取决于系统配置。
如何选择
- 明确需求:如果你的服务需要在特定的目标下运行,选择相应的目标(如
multi-user.target
)。 - 灵活性需求:如果你希望服务跟随系统的默认启动模式,选择
default.target
。
总结
WantedBy=multi-user.target
:适用于需要在多用户模式下运行的服务,明确且具体。WantedBy=default.target
:适用于希望服务根据系统默认启动目标运行的情况,更具灵活性,但依赖于系统的默认配置。
根据你的服务需求和系统配置,选择合适的 WantedBy
选项,以确保服务在预期的运行模式下启动和运行。