włączenie systemctl różni się od startu systemctl, w jaki sposób?

16

Korzystam z Arch Arch (najnowszy, aktualny) i próbuję uruchomić MySQL przy starcie. Po zainstalowaniu pakietu systemd mam dostępny systemctl i jako taki mogę robić takie rzeczy:

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

To wszystko w porządku i działa świetnie, gdy chcę uruchomić / zatrzymać ręcznie, jednak jeśli chodzi o to, aby uruchamiał się przy rozruchu (używając „enable” na systemctl, otrzymuję trochę nieprzyjemnych danych wyjściowych):

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

Oczywiście, ponieważ inne polecenia działają dobrze, jestem tym poważnie zdezorientowany i spędziłem sporo czasu próbując to rozgryźć ... status systemctl wyświetla to:

[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

Czy ktoś ma jakieś pomysły, dlaczego „włączanie” nie działa?

Rudi Visser
źródło

Odpowiedzi:

19

mysqld.servicejest „wirtualną” jednostką - nie istnieje w systemie plików, jest tylko częścią warstwy zgodności systemd. Możesz go uruchomić, a systemd uruchomi starszy /etc/rc.d/mysqldskrypt startowy, ale nie możesz tego systemctl enablezrobić, ponieważ potrzebujesz prawdziwego .servicepliku, który mógłby być dowiązany do odpowiedniego miejsca.

Możesz napisać taką jednostkę samodzielnie i umieścić ją w /etc/systemd/system/mysqld.service:

[Jednostka]
Opis = serwer MySQL
After = network.target

[Usługa]
ExecStart = / usr / bin / mysqld --defaults-file = / etc / mysql / my.cnf --datadir = / var / lib / mysql --socket = / var / run / mysqld / mysqld.sock
Użytkownik = mysql
Grupa = mysql
WorkingDirectory = / usr

[Zainstalować]
WantedBy = multi-user.target

Uruchom systemctl daemon-reloadpo utworzeniu / modyfikacji.


Alternatywnie możesz zainstalować initscripts-systemdpakiet, który obejmuje arch-daemons.targetautomatyczne uruchamianie usług zdefiniowanych w rc.conf. Jednak ten pakiet może wkrótce zniknąć i zawsze lepiej jest mieć natywne pliki konfiguracyjne dla używanego systemu init.

użytkownik1686
źródło
Dzięki! Właściwie napisałem własną usługę mysqld.service, która bardzo przypomina to wczoraj, ale przechodzi do /etc/rc.d/mysqld start / stop dla ExecStart / ExecStop. Zaakceptowana, opublikuje moją wersję również na wypadek, gdyby ktoś ją znalazł! Dzięki
Rudi Visser
3

@ Odpowiedź Grawity jest poprawna i prawdopodobnie lepsza niż ta, ale wczoraj udało mi się ją rozwiązać, przechodząc do skryptu 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
Rudi Visser
źródło
2

Uwaga: Pamiętaj, aby umieścić pliki jednostek specyficzne dla hosta /etc/systemd/system/i NIE /lib/systemd/system/.

Ten ostatni dotyczy rzeczy specyficznych dla dystrybucji; pierwszy dotyczy specyficznych dla hosta rzeczy, które sam konfigurujesz. To jak /usr/bin/vs. /usr/local/bin/odpowiednio.

Tak więc, chyba że pakiet sam zainstaluje pliki jednostek (poniżej /lib/systemd/system/), umieść własne „niestandardowe” elementy /etc/systemd/system/.

Aquarelle
źródło
1
To tak naprawdę nie odpowiada na jego pytanie. To bardziej przypomina komentarz do odpowiedzi @ Rudi.
PhilT
0

Włącz to aktywacja usługi „unit” aka daemon aka podczas uruchamiania 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)
ZaB
źródło
Tak, rozumiem to, a mysqld to demon / usługa, którą chcę uruchomić podczas uruchamiania. O to mi chodzi, zaczyna się / zatrzymuje, ale nie „włącza”.
Rudi Visser
0

W moim systemie FC15, kiedy uruchomiłem polecenie „systemctl enable mysqld.service”, automatycznie wróciło z:

mysqld.service nie jest usługą natywną, przekierowującą do / sbin / chkconfig. Wykonanie mysqld / sbin / chkconfig

Spróbuj uruchomić: /sbin/chkconfig mysqld on

john_a_s
źródło
0

Jeśli masz ... podczas włączania jednostki serwisowej, skopiuj ją do / etc / systemd / system

Failed to issue method call: No such file or directory

Aby włączyć jednostkę usługową, dodaj poniżej ..., aby można było włączyć system mysqld.service (jego włączenie w przestrzeni nazw każdego użytkownika)

[Install]
WantedBy=multi-user.target

Pozdrawiam, kochanie tolog

sugatang itlog
źródło