systemctl enable 与 systemctl start 不同,如何?

Rud*_*ser 17 mysql arch-linux systemd

我正在运行一个 Arch Linux(最新的、最新的)机器,并试图让 MySQL 在启动时启动。安装 systemd 软件包后,我可以使用 systemctl,因此我可以执行以下操作:

systemctl start mysqld.service
systemctl [stop|status|restart] mysqld.service
Run Code Online (Sandbox Code Playgroud)

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

[root@rudivarch ~]# systemctl enable mysqld.service
Failed to issue method call: No such file or directory
Run Code Online (Sandbox Code Playgroud)

显然,由于其他命令工作得很好,我对此感到非常困惑并且花了很多时间试图弄清楚...... 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
Run Code Online (Sandbox Code Playgroud)

任何人都对为什么“启用”不起作用有任何想法?

use*_*686 20

mysqld.service是一个“虚拟”单元——它不存在于文件系统中,它只是 systemd 兼容层的一部分。您可以启动它,systemd 将运行旧的/etc/rc.d/mysqldinitscript,但您不能这样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=multi-user.target

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


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