L'abilitazione di systemctl differisce dall'avvio di systemctl, come?


16

Sto eseguendo un box Arch Linux (più recente e aggiornato) e sto tentando di avviare MySQL all'avvio. Con il pacchetto systemd installato ho systemctl disponibile e come tale posso fare cose del genere:

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

Va tutto bene, e funziona benissimo quando voglio avviarlo / fermarlo manualmente, tuttavia, quando si tratta di avviarlo all'avvio (usando 'enable' su systemctl, ottengo un output sgradevole):

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

Ovviamente, dal momento che gli altri comandi funzionano bene, sono seriamente confuso da questo e ho speso molto mentre cercavo di capirlo ... lo stato di systemctl genera questo:

[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

Qualcuno ha qualche idea sul perché 'abilitare' non funziona?

Risposte:


19

mysqld.serviceè un'unità "virtuale" - non esiste sul filesystem, fa solo parte del livello di compatibilità di systemd. È possibile avviarlo e systemd eseguirà il file /etc/rc.d/mysqldinitscript legacy , ma non systemctl enableè possibile perché è necessario un .servicefile reale che potrebbe essere collegato in modo corretto nella posizione corretta.

Puoi scrivere tu stesso una tale unità e inserirla /etc/systemd/system/mysqld.service:

[Unità]
Descrizione = MySQL Server
Dopo = network.target

[Servizio]
ExecStart = / usr / bin / mysqld --defaults-file = / etc / mysql / my.cnf --datadir = / var / lib / mysql --socket = / var / run / mysqld / mysqld.sock
User = mysql
Gruppo = mysql
WorkingDirectory = / usr

[Installare]
WantedBy = multi-user.target

Esegui systemctl daemon-reloaddopo aver creato / modificato.


In alternativa, è possibile installare il initscripts-systemdpacchetto, che include arch-daemons.targetper l'avvio automatico dei servizi definiti in rc.conf. Tuttavia, questo pacchetto potrebbe scomparire presto ed è sempre meglio avere in uso file di configurazione nativi per il sistema init.


Grazie! In realtà ho scritto il mio mysqld.service che ricorda molto da vicino ieri, ma passa a /etc/rc.d/mysqld start / stop per ExecStart / ExecStop. Accettato, pubblicherò la mia versione anche nel caso in cui qualcun altro la trovi! Grazie
Rudi Visser,

3

La risposta di @ Grawity è corretta e probabilmente migliore di questa, ma ieri l'ho risolta sostanzialmente passando allo 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: ricorda di mettere sotto /etc/systemd/system/e NON i file di unità specifici dell'host /lib/systemd/system/.

Quest'ultimo è per cose distro-specifiche; il primo è per cose specifiche dell'host che configuri tu stesso. È come /usr/bin/vs. /usr/local/bin/, rispettivamente.

Quindi, a meno che un pacchetto non installi i file di unità da solo (sotto /lib/systemd/system/), metti le tue cose "personalizzate" sotto /etc/systemd/system/.


1
Questo non risponde davvero alla sua domanda. Sembra più un commento alla risposta di @ Rudi.
PhilT,

0

Abilitare è di attivare il servizio "unit" aka daemon aka all'avvio di 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)

Sì, lo capisco e mysqld è un demone / servizio che voglio eseguire all'avvio. Questo è il mio punto, si avvia / arresta, ma non "abilita".
Rudi Visser,

0

Sul mio sistema FC15, quando ho eseguito 'systemctl enable mysqld.service', è tornato automaticamente con:

mysqld.service non è un servizio nativo, reindirizzando a / sbin / chkconfig. Eseguire / sbin / chkconfig mysqld su

Quindi prova a correre: /sbin/chkconfig mysqld on


0

Se hai ... quando si abilita l'unità di servizio, copiarla in / etc / systemd / system

Failed to issue method call: No such file or directory

Per abilitare la tua unità di servizio, aggiungi sotto ... in modo da poter abilitare il sistema mysqld.service (la sua abilitazione nello spazio dei nomi di ogni utente)

[Install]
WantedBy=multi-user.target

Saluti, sugatang itlog

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.