在使用systemd 的管理工具systemctl 管理进程的过程中,我发现有些服务显示vendor preset: disabled,比如docker服务,而有些服务显示vendor preset: enabled,比如sshd服务,并且使用systemctl enable 只会改变loaded 的状态,而vendor preset仍然为disabled
一、 为什么我的服务是vendor preset: disabled
经过查阅资料,我得知vendor preset为Linux发行版默认配置,是在Linux 发行制作过程预设的,一般一些重要的系统服务会配置为enabled,比如sshd,因此,我们在安装操作系统的时候,在一开始就能正常使用这些重要服务。
但像docker,mysqld这些用户应用服务,是由用户手工管理,使用systemctl enable 来设置为开机自启动,并没有设置到操作系统的发行预设里。 而且同一名称的服务,如果既使用了systemctl enable ,又配置了vendor preset,systemctl enable/disable的优先级要高于vendor preset。所以,我们没必要担心这儿的docker服务显示vendor preset: disabled
如果你有洁癖,看着disabled 不舒服,也不是说不能更改,但需要重启服务器,而且更改的意义不大。
更改的方法:
cd /lib/systemd/system-preset/
grep sshd *
vim 90-default.preset 在sshd 的后边加一行enable docker.service,保存
enable sshd.service
enable docker.service
reboot
此时的docker服务已经为vendor preset: enabled
再次拿dockerd的例子谈一谈,比如systemctl disable docker,重启服务器,开机后,虽然vendor preset: enabled ,但服务仍然是没有跟随操作系统的启动而启动,这就能很好地理解systemctl enable/disable的优先级高于vendor preset 的设置。
二、vendor preset: enabled/disable 和systemctl enable/disable 设计是重复吗
可能又会有人问,sshd 随操作系统启动是一个大概率事件,既然发行版预设sshd 为vendor preset: enabled,那为啥还要加入手工管理呢(systemctl enable/disable sshd)
手工管理是为了更灵活,我们需要使用sshd 来配置服务器,但如果遭遇服务器被攻击等情况,我们想临时关闭sshd服务一段时间,使用vnc 来管理,这种情况下systemctl disable sshd 存在也是合理的,避免因为服务器重启再次打开sshd服务,修复后,我们又想设置为开机启动,systemctl enable sshd又会派上用场。
实际上vendor preset 是操作系统设计之初认为需要优先启动的,相当于手机的出厂设置,systemctl enable/disable就是给用户管理使用的,用户是上帝,用户的操作优先级肯定最高。
注意:
CentOS 7开始预设并使用Systemd
Ubuntu 15.04开始并预设使用Systemd