включення systemctl відрізняється від запуску systemctl, як?


16

Я запускаю вікно Arch Linux (найновіший, найновіший) і намагаюся запустити MySQL для запуску під час завантаження. При встановленому пакеті systemd у мене є systemctl, і я можу робити такі речі:

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

Це все добре, і чудово працює, коли я хочу запустити / зупинити вручну, однак, коли мова заходить про його запуск при завантаженні (використовуючи 'enable' у systemctl, я отримую деякий неприємний вихід):

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

Очевидно, оскільки інші команди працюють чудово, я серйозно збентежений цим і витратив хороший час, намагаючись розібратися в цьому ... статус systemctl виводить це:

[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

У когось є ідеї, чому функція "включення" не працює?

Відповіді:


19

mysqld.serviceє "віртуальним" блоком - його не існує у файловій системі, це лише частина рівня сумісності systemd. Ви можете запустити його, і systemd запустить застарілий /etc/rc.d/mysqldinitscript, але ви не можете systemctl enableцього, тому що вам потрібен реальний .serviceфайл, який міг би бути пов’язаний у потрібне місце.

Ви можете написати таку одиницю самостійно і помістити її /etc/systemd/system/mysqld.service:

[Одиниця]
Опис = MySQL Server
Після = network.target

[Сервіс]
ExecStart = / usr / bin / mysqld --defaults-file = / etc / mysql / my.cnf --datadir = / var / lib / mysql --socket = / var / run / mysqld / mysqld.sock
Користувач = mysql
Група = mysql
WorkingDirectory = / usr

[Встановити]
WantedBy = багатокористувач

Запустити systemctl daemon-reloadпісля створення / зміни.


Крім того, ви можете встановити initscripts-systemdпакет, який включає arch-daemons.targetавтоматичне запуск послуг, визначених у rc.conf. Однак цей пакет може скоро піти, і завжди краще використовувати вбудовані файли конфігурації для системи init.


Спасибі! Насправді я написав власну mysqld.service, яка дуже нагадує це вчора, але проходить через /etc/rc.d/mysqld start / stop для ExecStart / ExecStop. Прийнятий, опублікує мою версію також у випадку, якщо хтось інший знайде її! Спасибі
Руді Віссер

3

@ Відповідь Grawity правильна і, ймовірно, краща за це, але я вчора вирішив це, в основному, переходячи до сценарію 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: Пам’ятайте, що для файлів одиничних файлів, розміщених для хоста, розміщуйте під /etc/systemd/system/та NOT /lib/systemd/system/.

Остання призначена для специфічних для дистрофії речей; перший - це специфічний для хоста матеріал, який ви налаштовуєте самі. Це як /usr/bin/проти прогнозу /usr/local/bin/відповідно.

Тому, якщо пакет не встановлює файли одиниць самостійно (під /lib/systemd/system/), підкладайте свої власні "спеціальні" речі /etc/systemd/system/.


1
Це насправді не відповідає на його запитання. Це більше схоже на коментар до відповіді @ Руді.
PhilT

0

Увімкнути - це активувати послугу "unit" aka daemon aka aka при запуску системи 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)

Так, я розумію це, і mysqld - це демон / послуга, яку я хочу запустити при запуску. Це моя суть, вона починається / зупиняється, але не "вмикає".
Руді Віссер

0

У моїй системі FC15, коли я запускав "systemctl enable mysqld.service", він автоматично повертався з:

mysqld.service не є рідною службою, перенаправляючи на / sbin / chkconfig. Виконання / sbin / chkconfig mysqld увімкнено

Тому спробуйте запустити: /sbin/chkconfig mysqld on


0

Якщо у вас є ... під час ввімкнення вашого блоку обслуговування, скопіюйте його в / etc / systemd / system

Failed to issue method call: No such file or directory

Щоб увімкнути свій блок обслуговування, додайте нижче ..., щоб ви могли ввімкнути систему mysqld.service (її ввімкнути в просторі імен кожного користувача)

[Install]
WantedBy=multi-user.target

Ура, сугатанг itlog

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.