systemctl enable 与 systemctl start 有何不同?

systemctl enable 与 systemctl start 有何不同?

我正在运行 Arch Linux(最新版)机器,并尝试让 MySQL 在启动时启动。安装 systemd 包后,我就可以使用 systemctl,因此我可以执行以下操作:

systemctl start mysqld.service
systemctl [stop|status|restart] mysqld.service

这一切都很好,当我想手动启动/停止时,效果很好,但是,当涉及到让它在启动时启动时(通过在 systemctl 上使用“enable”,我得到了一些令人讨厌的输出):

[root@rudivarch ~]# systemctl enable mysqld.service
Failed to issue method call: No such file or directory

显然,由于其他命令工作正常,我对此感到非常困惑,并花了很长时间才弄清楚......systemctl status 输出以下内容:

[root@rudivarch ~]# systemctl status mysqld.service
mysqld.service
     Loaded: loaded (/etc/rc.d/mysqld)
     Active: inactive (dead) since Tue, 31 Jan 2012 15:32:28 +0000; 1min 25s ago
    Process: 589 ExecStop=/etc/rc.d/mysqld stop (code=exited, status=0/SUCCESS)
    Process: 257 ExecStart=/etc/rc.d/mysqld start (code=exited, status=0/SUCCESS)
    CGroup: name=systemd:/system/mysqld.service

有人知道为什么“启用”不起作用吗?

答案1

mysqld.service是一个“虚拟”单元——它不存在于文件系统中,它只是 systemd 兼容层的一部分。您可以启动它,systemd 将运行旧版 initscript /etc/rc.d/mysqld,但您无法启动systemctl enable它,因为您需要一个.service可以符号链接到正确位置的真实文件。

您可以自己编写这样的单元并将其放入/etc/systemd/system/mysqld.service

[单元]
描述=MySQL 服务器
之后=网络.目标

[服务]
ExecStart=/usr/bin/mysqld --defaults-file=/etc/mysql/my.cnf --datadir=/var/lib/mysql --socket=/var/run/mysqld/mysqld.sock
用户=mysql
组=mysql
工作目录=/usr

[安装]
WantedBy=多用户.目标

systemctl daemon-reload创建/修改后运行。


或者,您可以安装initscripts-systemd软件包,其中包括arch-daemons.target中定义的用于自动启动 的服务rc.conf。但是,这个软件包可能很快就会消失,并且最好为正在使用的 init 系统使用本机配置文件。

答案2

@Grawity 的答案是正确的,可能比这更好,但我昨天确实通过传递到 rc.d 脚本解决了这个问题......

/lib/systemd/system/mysqld.service

[Unit]
Description=MySQL Server
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.d/mysqld start
ExecStop=/etc/rc.d/mysqld stop

[Install]
WantedBy=multi-user.target

答案3

注意:请记住将主机特定的单元文件放在 和 下/etc/systemd/system/,而不是/lib/systemd/system/

后者适用于特定于发行版的内容;前者适用于您自己配置的特定于主机的内容。它们分别类似于/usr/bin/vs /usr/local/bin/.。

因此,除非软件包自行安装单元文件(在 下/lib/systemd/system/),否则请将您自己的“自定义”内容放在 下/etc/systemd/system/

答案4

在我的 FC15 系统上,当我运行“systemctl enable mysqld.service”时,它自动返回:

mysqld.service 不是本机服务,重定向到 /sbin/chkconfig。在执行 /sbin/chkconfig mysqld

因此尝试运行: /sbin/chkconfig mysqld on

相关内容