L'activation de systemctl diffère du démarrage de systemctl, comment?


16

J'utilise une boîte Arch Linux (la plus récente et la plus récente) et j'essaye de faire démarrer MySQL au démarrage. Avec le package systemd installé, j'ai systemctl disponible, et en tant que tel, je peux faire des choses comme ceci:

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

C'est très bien, et fonctionne très bien quand je veux démarrer / arrêter manuellement, cependant, quand il s'agit de le faire démarrer au démarrage (en utilisant 'enable' sur systemctl, j'obtiens une sortie désagréable):

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

Évidemment, puisque les autres commandes fonctionnent très bien, je suis sérieusement confus par cela et j'ai passé beaucoup de temps à essayer de le comprendre ... Le statut de systemctl génère 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 de pourquoi «activer» ne fonctionne pas?

Réponses:


19

mysqld.serviceest une unité "virtuelle" - elle n'existe pas sur le système de fichiers, elle fait juste partie de la couche de compatibilité de systemd. Vous pouvez le démarrer et systemd exécutera l'héritage /etc/rc.d/mysqldinitscript, mais vous ne pouvez pas le systemctl enablefaire car vous avez besoin d'un vrai .servicefichier qui pourrait être lié à l'endroit approprié.

Vous pouvez écrire une telle unité vous-même et la mettre dans /etc/systemd/system/mysqld.service:

[Unité]
Description = Serveur MySQL
Après = network.target

[Un 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-reloadaprès la création / modification.


Vous pouvez également installer le initscripts-systemdpackage, qui comprend arch-daemons.targetle démarrage automatique des services définis dans rc.conf. Cependant, ce paquet pourrait disparaître bientôt, et il est toujours préférable d'avoir des fichiers de configuration natifs pour le système init utilisé.


Merci! J'ai en fait écrit mon propre mysqld.service qui ressemble beaucoup à cela hier, mais passe à /etc/rc.d/mysqld start / stop pour ExecStart / ExecStop. Accepté, affichera également ma version au cas où quelqu'un d'autre la trouverait! Merci
Rudi Visser

3

@ La réponse de Grawity est correcte et probablement meilleure que cela, mais je l'ai résolu hier essentiellement en passant par le 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

2

Nota bene: N'oubliez pas de placer les fichiers d'unité spécifiques à l'hôte sous /etc/systemd/system/et NON /lib/systemd/system/.

Ce dernier est pour les trucs spécifiques à la distribution; le premier est pour les choses spécifiques à l'hôte que vous configurez vous-même. C'est comme /usr/bin/contre /usr/local/bin/, respectivement.

Donc, à moins qu'un package n'installe les fichiers d'unité par lui-même (en dessous /lib/systemd/system/), mettez vos propres éléments "personnalisés" sous /etc/systemd/system/.


1
Cela ne répond pas vraiment à sa question. Cela ressemble plus à un commentaire à la réponse de @ Rudi.
PhilT

0

Activer consiste à activer le service "unit" aka daemon aka 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)

Oui, je comprends cela, et mysqld est un démon / service que je veux exécuter au démarrage. C'est mon point, il démarre / s'arrête, mais ne "s'activera" pas.
Rudi Visser

0

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, redirigeant vers / sbin / chkconfig. Exécution de / sbin / chkconfig mysqld sur

Essayez donc de lancer: /sbin/chkconfig mysqld on


0

Si vous avez ... lors de l'activation de 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 (son activation dans l'espace de noms de chaque utilisateur)

[Install]
WantedBy=multi-user.target

Salutations, sugatang itlog

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.