systemctl enable unterscheidet sich von systemctl start, wie?

45754
Rudi Visser

Ich verwende eine Arch Linux-Box (aktuell, aktuell) und versuche, MySQL beim Booten zu starten. Wenn das systemd-Paket installiert ist, habe ich systemctl zur Verfügung, und als solches kann ich Folgendes tun:

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

Das ist alles in Ordnung und funktioniert hervorragend, wenn ich manuell starten / stoppen möchte. Wenn es jedoch zum Starten beim Booten kommt (durch das Aktivieren von 'systemctl' bekomme ich ein paar unangenehme Ergebnisse):

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

Da die anderen Befehle gut funktionieren, bin ich natürlich sehr verwirrt und 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?

15

6 Antworten auf die Frage

19
grawity

mysqld.service is a "virtual" unit – it doesn't exist on the filesystem, it's just part of systemd's compatibility layer. You can start it and systemd will run the legacy /etc/rc.d/mysqld initscript, but you cannot systemctl enable it because you need a real .service file which could be symlinked into the proper place.

You can write such a unit yourself and put it in /etc/systemd/system/mysqld.service:

[Unit] Description=MySQL Server After=network.target [Service] ExecStart=/usr/bin/mysqld --defaults-file=/etc/mysql/my.cnf --datadir=/var/lib/mysql --socket=/var/run/mysqld/mysqld.sock User=mysql Group=mysql WorkingDirectory=/usr [Install] WantedBy=multi-user.target 

Run systemctl daemon-reload after creating/modifying.


Alternatively, you can install the initscripts-systemd package, which includes arch-daemons.target for automatically starting services defined in rc.conf. However, this package might go away soon, and it's always better to have native configuration files for the init system in use.

Vielen Dank! Ich habe tatsächlich meinen eigenen mysqld.service geschrieben, der gestern sehr genau ähnelt, aber zu /etc/rc.d/mysqld start / stop für ExecStart / ExecStop durchläuft. Angenommen, postet meine Version auch für den Fall, dass jemand anders sie findet! Vielen Dank Rudi Visser vor 12 Jahren 0
3
Rudi Visser

@ Grawitys Antwort ist korrekt und wahrscheinlich besser als diese, aber ich habe es gestern gelöst, im Wesentlichen durch Weitergabe an das rc.d-Skript ...

/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 
2
Aquarelle

Anmerkung: Denken Sie daran, hostspezifische Unit-Dateien unter /etc/systemd/system/und NOT zu unterlegen /lib/systemd/system/.

Letzteres ist für Distro-spezifische Sachen; Ersteres ist für hostspezifische Dinge, die Sie selbst konfigurieren. Es ist wie /usr/bin/gegenüber /usr/local/bin/sind.

Wenn also ein Paket keine Unit-Dateien (unter /lib/systemd/system/) installiert, fügen Sie Ihre eigenen "benutzerdefinierten" Sachen hinzu /etc/systemd/system/.

Das beantwortet seine Frage nicht wirklich. Dies sieht eher nach einem Kommentar zu @ Rudis Antwort aus. PhilT vor 9 Jahren 1
0
ZaB

Aktivieren ist die Aktivierung des "unit" -Dienstes (Daemon) beim Starten von systemd.

OpenSUSE:

# systemctl list-units --all | grep sql mysql.service loaded inactive dead LSB: Start the MySQL database  (good)  # systemctl enable mysql.service mysql.service is not a native service, redirecting to /sbin/chkconfig. Executing /sbin/chkconfig mysql on insserv: Service localfs has to exists for service vmware-USBArbitrator insserv: Service network is missed in the runlevels 2 to use service vmware Warning: unit files do not carry install information. No operation executed.  (it actually redirects to old chkconfig/sysvinit and that corrects init databases)  # systemctl start mysql.service  (no output)  # systemctl status mysql.service mysql.service - LSB: Start the MySQL database server Loaded: loaded (/etc/init.d/mysql) Active: active (running) since Tue, 31 Jan 2012 20:07:52 +0100; 5s ago Process: 999999 ExecStart=/etc/init.d/mysql start (code=exited, status=0/SUCCESS) CGroup: name=systemd:/system/mysql.service ├ 999999 /bin/sh /usr/bin/mysqld_safe --mysqld=mysqld --user=mysql... └ 999999 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql...  (sort of runs) 
Ja, ich verstehe das, und mysqld ist ein Daemon / Dienst, den ich beim Start ausführen möchte. Dies ist mein Punkt, es startet / stoppt, wird aber nicht "aktiviert". Rudi Visser vor 12 Jahren 0
0
john_a_s

Als ich auf meinem FC15-System 'systemctl enable mysqld.service' ausführte, kam es automatisch mit folgendem Befehl zurück:

mysqld.service ist kein systemeigener Dienst, der zu / sbin / chkconfig umleitet. Ausführen von / sbin / chkconfig mysqld auf

Versuchen Sie also, zu laufen: /sbin/chkconfig mysqld on

0
sugatang itlog

Wenn Sie ... bei der Aktivierung Ihrer Service-Einheit haben, kopieren Sie sie nach / etc / systemd / system

Failed to issue method call: No such file or directory 

Um Ihre Service-Einheit zu aktivieren, fügen Sie unterhalb der ... hinzu, damit Sie mysqld.service aktivieren können (seine Aktivierung im Namespace jedes Benutzers).

[Install] WantedBy=multi-user.target 

Prost, sugatang itlog