我正在运行 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