J'utilise une boîte de dialogue Arch Linux (la plus récente et la plus récente) et j'essaie de faire démarrer MySQL au démarrage. Avec le paquet systemd installé, j'ai systemctl disponible et, à ce titre, je peux faire les choses suivantes:
systemctl start mysqld.service
systemctl [stop|status|restart] mysqld.service
Tout va bien, et fonctionne très bien quand je veux démarrer/arrêter manuellement, cependant, quand il s'agit de le démarrer au démarrage (en utilisant 'enable' sur systemctl, j'obtiens des résultats désagréables):
[root@rudivarch ~]# systemctl enable mysqld.service
Failed to issue method call: No such file or directory
Evidemment, puisque les autres commandes fonctionnent très bien, je suis sérieusement déconcerté par cela et j'ai passé beaucoup de temps à essayer de le comprendre. Le statut de systemctl affiche ceci:
[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
Quelqu'un a-t-il une idée sur la raison pour laquelle "activer" ne fonctionne pas?
mysqld.service
est une unité "virtuelle" - elle n'existe pas sur le système de fichiers, elle fait simplement partie de la couche de compatibilité de systemd. Vous pouvez le démarrer et systemd exécutera l'initscript /etc/rc.d/mysqld
hérité, mais vous ne pouvez pas le systemctl enable
car vous avez besoin d'un fichier .service
réel pouvant être lié de manière symétrique au bon endroit.
Vous pouvez écrire vous-même une telle unité et la mettre dans /etc/systemd/system/mysqld.service
:
[Unité] Description = Serveur MySQL Après = network.target [Service] ExecStart =/usr/bin/mysqld --defaults-file =/etc/mysql/my.cnf --datadir =/var/lib/mysql --socket =/var/run/mysqld/mysqld.sock Utilisateur = mysql Groupe = mysql Répertoire de travail =/usr [Installer] WantedBy = multi-user.target
Exécutez systemctl daemon-reload
après avoir créé/modifié.
Vous pouvez également installer le package initscripts-systemd
, qui inclut Arch-daemons.target
pour le démarrage automatique des services définis dans rc.conf
. Cependant, ce paquet pourrait bientôt disparaître et il est toujours préférable d'avoir des fichiers de configuration natifs pour le système init en cours d'utilisation.
La réponse de @ Grawity est correcte et probablement meilleure que cela, mais je l'ai résolue hier en passant au script 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
Nota bene: N'oubliez pas de placer les fichiers d'unité spécifiques à l'hôte sous /etc/systemd/system/
et NOT /lib/systemd/system/
.
Ce dernier est pour des choses spécifiques à la distribution; le premier concerne les éléments spécifiques à l'hôte que vous configurez vous-même. C'est comme /usr/bin/
vs /usr/local/bin/
, respectivement.
Donc, à moins qu'un paquet n'installe lui-même les fichiers d'unité (sous /lib/systemd/system/
), placez vos propres éléments "personnalisés" sous /etc/systemd/system/
.
Sur mon système FC15, lorsque j'ai exécuté 'systemctl enable mysqld.service', il est revenu automatiquement avec:
mysqld.service n'est pas un service natif, il redirige vers/sbin/chkconfig. Exécuter/sbin/chkconfig mysqld sur
Alors essayez de courir: /sbin/chkconfig mysqld on
Activer consiste à activer "unité" aka démon aka service au démarrage de 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)
Si vous avez ... lorsque vous activez votre unité de service, copiez-la dans/etc/systemd/system
Failed to issue method call: No such file or directory
Pour activer votre unité de service, ajoutez ci-dessous le ... afin que vous puissiez activer le système mysqld.service (activé dans les espaces de noms de tous les utilisateurs).
[Install]
WantedBy=multi-user.target
À la votre, sugatang itlog