mengaktifkan systemctl berbeda dari systemctl start, bagaimana?

16

Saya menjalankan kotak Arch Linux (terbaru, terbaru), dan berusaha membuat MySQL untuk memulai saat boot. Dengan paket systemd terinstal, saya memiliki systemctl tersedia, dan karena itu saya dapat melakukan hal-hal seperti ini:

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

Semua baik-baik saja, dan berfungsi dengan baik ketika saya ingin memulai / berhenti secara manual, namun, ketika datang untuk memulainya saat boot (dengan menggunakan 'aktifkan' pada systemctl, saya mendapatkan beberapa keluaran buruk):

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

Jelas, karena perintah lain bekerja dengan baik, saya benar-benar bingung dengan ini dan telah menghabiskan banyak waktu sambil mencoba mencari tahu ... keluaran status systemctl ini:

[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

Adakah yang tahu mengapa 'mengaktifkan' tidak berfungsi?

Rudi Visser
sumber

Jawaban:

19

mysqld.serviceadalah unit "virtual" - tidak ada pada sistem file, itu hanya bagian dari lapisan kompatibilitas systemd. Anda dapat memulainya dan systemd akan menjalankan /etc/rc.d/mysqldskrip init warisan , tetapi Anda tidak dapat systemctl enablemelakukannya karena Anda memerlukan .servicefile nyata yang dapat disinkronkan ke tempat yang tepat.

Anda dapat menulis unit seperti itu sendiri dan memasukkannya ke dalam /etc/systemd/system/mysqld.service:

[Satuan]
Deskripsi = Server MySQL
Setelah = network.target

[Layanan]
ExecStart = / usr / bin / mysqld --defaults-file = / etc / mysql / my.cnf --datadir = / var / lib / mysql --socket = / var / run / mysqld / mysqld.sock
Pengguna = mysql
Grup = mysql
WorkingDirectory = / usr

[Install]
WantedBy = multi-user.target

Jalankan systemctl daemon-reloadsetelah membuat / memodifikasi.


Atau, Anda dapat menginstal initscripts-systemdpaket, yang mencakup arch-daemons.targetuntuk memulai layanan secara otomatis yang ditentukan dalam rc.conf. Namun, paket ini mungkin akan segera hilang, dan selalu lebih baik untuk memiliki file konfigurasi asli untuk sistem init yang digunakan.

pengguna1686
sumber
Terima kasih! Saya benar-benar menulis mysqld.service saya sendiri yang sangat mirip dengan kemarin, tetapi melewati /etc/rc.d/mysqld start / stop untuk ExecStart / ExecStop. Diterima, akan memposting versi saya juga kalau-kalau ada orang lain yang menemukannya! Terima kasih
Rudi Visser
3

@Grawity jawaban benar dan mungkin lebih baik dari ini, tapi saya menyelesaikannya kemarin pada dasarnya dengan melewati skrip 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
sumber
2

Nota bene: Ingatlah untuk meletakkan file unit khusus host di bawah /etc/systemd/system/dan BUKAN /lib/systemd/system/.

Yang terakhir adalah untuk hal-hal khusus distro; yang pertama adalah untuk hal-hal khusus host yang Anda konfigurasikan sendiri. Ini seperti /usr/bin/vs /usr/local/bin/, masing-masing.

Jadi, kecuali sebuah paket menginstal file unit dengan sendirinya (di bawah /lib/systemd/system/), letakkan barang "custom" Anda sendiri di bawah /etc/systemd/system/.

Akuarel
sumber
1
Ini tidak benar-benar menjawab pertanyaannya. Ini lebih mirip komentar untuk jawaban @ Rudi.
PhilT
0

Aktifkan adalah untuk mengaktifkan "unit" alias layanan daemon alias saat startup dari 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
sumber
Ya saya mengerti ini, dan mysqld adalah daemon / layanan yang ingin saya jalankan saat startup. Ini maksud saya, ini dimulai / berhenti, tetapi tidak akan "mengaktifkan".
Rudi Visser
0

Pada sistem FC15 saya, ketika saya menjalankan 'systemctl enable mysqld.service', secara otomatis kembali dengan:

mysqld.service bukan layanan asli, mengarahkan ke / sbin / chkconfig. Menjalankan / sbin / chkconfig mysqld pada

Jadi coba jalankan: /sbin/chkconfig mysqld on

john_a_s
sumber
0

Jika Anda punya ... saat mengaktifkan unit layanan Anda, salin ke / etc / systemd / system

Failed to issue method call: No such file or directory

Untuk mengaktifkan unit layanan Anda, tambahkan di bawah ... sehingga Anda dapat mengaktifkan sistem mysqld.service (ini memungkinkan di setiap namespace pengguna)

[Install]
WantedBy=multi-user.target

Cheers, sugatang itlog

sugatang itlog
sumber