
我正在運行 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 將運行舊的/etc/rc.d/mysqld
init 腳本,但您不能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=多用戶.target
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/
和 NOT下/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