systemctl devrede systemctl başlangıçtan farklı, nasıl?


16

Bir Arch Linux (en son, güncel) kutusu çalıştırıyorum ve MySQL'in önyüklemeye başlamasını sağlamaya çalışıyorum. Kurulu systemd paketi ile mevcut systemctl var ve bu gibi şeyler yapabilirim:

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

Her şey yolunda ve manüel olarak başlatmak / durdurmak istediğimde harika çalışıyor, ancak önyüklemede başlamaya gelince (systemctl'de 'enable' kullanarak, bazı kötü çıktılar alıyorum):

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

Açıkçası, diğer komutlar gayet iyi çalıştığı için, bununla ciddi şekilde kafam karıştı ve anlamaya çalışırken iyi geçirdim ... systemctl status çıktılar:

[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

'Etkinleştir' in neden işe yaramadığına dair bir fikri olan var mı?

Yanıtlar:


19

mysqld.service"sanal" bir birimdir - dosya sisteminde mevcut değildir, sadece systemd'in uyumluluk katmanının bir parçasıdır. Başlatabilir ve systemd eski /etc/rc.d/mysqldinitscript'i çalıştıracaktır , ancak bunu yapamazsınız systemctl enable, çünkü .serviceuygun yere sembolize edilmiş gerçek bir dosyaya ihtiyacınız vardır .

Böyle bir birimi kendiniz yazabilir ve içine koyabilirsiniz /etc/systemd/system/mysqld.service:

[Birim]
Açıklama = MySQL Sunucusu
= Network.target sonra

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

[Yüklemek]
WantedBy = multi-user.target

Oluşturduktan systemctl daemon-reload/ değiştirdikten sonra çalıştırın .


Alternatif olarak, içinde tanımlanan hizmetlerin otomatik olarak başlatılmasını initscripts-systemdiçeren paketi yükleyebilirsiniz . Ancak, bu paket yakında kaybolabilir ve kullanılan init sistemi için yerel yapılandırma dosyalarına sahip olmak her zaman daha iyidir.arch-daemons.targetrc.conf


Teşekkürler! Aslında dün buna çok benzeyen ama ExecStart / ExecStop için /etc/rc.d/mysqld start / stop'a geçen kendi mysqld.service'imi yazdım. Kabul edildi, başka birinin bulması durumunda versiyonumu da yayınlayacak! Teşekkürler
Rudi Visser

3

@ Grawity'nin cevabı doğru ve muhtemelen bundan daha iyi, ama dün temelde rc.d betiğine geçerek çözüldüm ...

/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

Not: Ana bilgisayara özgü birim dosyalarını /etc/systemd/system/NOT ve altına koymayı unutmayın /lib/systemd/system/.

İkincisi, distro-spesifik şeyler içindir; birincisi, kendi yapılandırdığınız ana bilgisayara özgü şeyler içindir. Sırasıyla /usr/bin/vs. gibidir /usr/local/bin/.

Dolayısıyla, bir paket birim dosyalarını tek başına (altında /lib/systemd/system/) yüklemezse, kendi "özel" öğelerinizi altına koyun /etc/systemd/system/.


1
Bu onun sorusuna gerçekten cevap vermiyor. Bu daha çok @ Rudi'nin cevabına yapılan bir yorum gibi görünüyor.
PhilT

0

Etkinleştirme, başlangıçta "birim" aka daemon aka hizmetini etkinleştirmektir 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)

Evet bunu anlıyorum ve mysqld başlangıçta çalıştırmak istediğim bir arka plan programı / hizmet. Bu benim açımdan, başlar / durur, ancak "etkin" olmaz.
Rudi Visser

0

FC15 sistemimde, 'systemctl enable mysqld.service' çalıştırdığımda, otomatik olarak geri geldi:

mysqld.service, / sbin / chkconfig adresine yönlendiren yerel bir hizmet değil. / Sbin / chkconfig mysqld çalıştırılıyor

Bu yüzden koşmayı deneyin: /sbin/chkconfig mysqld on


0

Hizmet biriminizi etkinleştirirken ... varsa, / etc / systemd / system dizinine kopyalayın

Failed to issue method call: No such file or directory

Hizmet biriminizi etkinleştirmek için, aşağıya ... ekleyin, böylece sistem etkinleştirme mysqld.service (her kullanıcının ad alanında etkinleşir)

[Install]
WantedBy=multi-user.target

Şerefe, sugatang itlog

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.