
Ich verwende eine Arch Linux-Box (aktuellste, aktuellste Version) und versuche, MySQL beim Booten zu starten. Wenn das systemd-Paket installiert ist, steht mir systemctl zur Verfügung und ich kann folgende Dinge tun:
systemctl start mysqld.service
systemctl [stop|status|restart] mysqld.service
Das ist alles in Ordnung und funktioniert gut, wenn ich es manuell starten/stoppen möchte. Wenn ich es jedoch beim Booten starten lassen möchte (indem ich „enable“ auf systemctl verwende, erhalte ich eine unangenehme Ausgabe):
[root@rudivarch ~]# systemctl enable mysqld.service
Failed to issue method call: No such file or directory
Da die anderen Befehle einwandfrei funktionieren, verwirrt mich das offensichtlich ernsthaft und ich habe eine ganze Weile versucht, es herauszufinden ... systemctl status gibt Folgendes aus:
[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
Hat jemand eine Idee, warum „Aktivieren“ nicht funktioniert?
Antwort1
mysqld.service
ist eine „virtuelle“ Einheit – sie existiert nicht im Dateisystem, sondern ist nur Teil der Kompatibilitätsschicht von systemd. Sie können sie starten und systemd führt das alte /etc/rc.d/mysqld
Initscript aus, aber Sie können systemctl enable
es nicht, weil Sie eine echte Datei benötigen .service
, die an der richtigen Stelle symbolisch verknüpft werden könnte.
Sie können eine solche Einheit selbst schreiben und in Folgendes einfügen /etc/systemd/system/mysqld.service
:
[Einheit] Beschreibung=MySQL Server Nach=Netzwerk.Ziel [Service] ExecStart=/usr/bin/mysqld --defaults-file=/etc/mysql/my.cnf --datadir=/var/lib/mysql --socket=/var/run/mysqld/mysqld.sock Benutzer=mysql Gruppe=mysql Arbeitsverzeichnis=/usr [Installieren] WantedBy=Mehrbenutzer.Ziel
systemctl daemon-reload
Nach dem Erstellen/Ändern ausführen .
Alternativ können Sie das initscripts-systemd
Paket installieren, das arch-daemons.target
den automatischen Start der in definierten Dienste beinhaltet rc.conf
. Dieses Paket wird jedoch möglicherweise bald nicht mehr verfügbar sein und es ist immer besser, native Konfigurationsdateien für das verwendete Init-System zu haben.
Antwort2
Die Antwort von @Grawity ist richtig und wahrscheinlich besser als diese, aber ich habe es gestern im Wesentlichen gelöst, indem ich zum rc.d-Skript übergegangen bin …
/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
Antwort3
Nota bene: Denken Sie daran, hostspezifische Unit-Dateien unter /etc/systemd/system/
und NICHT unterzubringen /lib/systemd/system/
.
Letzteres ist für distributionsspezifische Dinge; Ersteres ist für hostspezifische Dinge, die Sie selbst konfigurieren. Es ist wie /usr/bin/
vs. /usr/local/bin/
bzw. .
Sofern ein Paket also keine Unit-Dateien selbst (unter /lib/systemd/system/
) installiert, platzieren Sie Ihre eigenen „benutzerdefinierten“ Sachen unter /etc/systemd/system/
.
Antwort4
Als ich auf meinem FC15-System „systemctl enable mysqld.service“ ausführte, kam automatisch folgendes zurück:
mysqld.service ist kein nativer Dienst und leitet zu /sbin/chkconfig weiter. Ausführen von /sbin/chkconfig mysqld auf
Versuchen Sie also Folgendes auszuführen:
/sbin/chkconfig mysqld on