web-dev-qa-db-fra.com

systemctl enable diffère de systemctl start, commenter?

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?

16
Rudi Visser

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.

19
grawity

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
3
Rudi Visser

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/.

2
Aquarelle

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

0
john_a_s

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)
0
ZaB

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

0
sugatang itlog