Отключение systemctl отличается от запуска systemctl, чем?

45641
Rudi Visser

Я использую 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 

У кого-нибудь есть идеи, почему «enable» не работает?

15

6 ответов на вопрос

19
grawity

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 = multi-user.target 

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


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

Спасибо! Я на самом деле написал свой собственный mysqld.service, который очень похож на этот вчера, но проходит через /etc/rc.d/mysqld start / stop для ExecStart / ExecStop. Принято, опубликует мою версию также в случае, если кто-то еще найдет ее! Спасибо Rudi Visser 12 лет назад 0
3
Rudi Visser

Ответ @ 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
Aquarelle

Примечание: не забудьте поместить файлы отдельных узлов под /etc/systemd/system/и НЕ /lib/systemd/system/.

Последний предназначен для дистрибутивных вещей; первый предназначен для конкретного хоста, который вы настраиваете сами. Это как /usr/bin/против /usr/local/bin/, соответственно.

Поэтому, если пакет не устанавливает файлы модулей самостоятельно (под /lib/systemd/system/), поместите свои собственные "пользовательские" вещи в /etc/systemd/system/.

Это на самом деле не отвечает на его вопрос. Это больше похоже на комментарий к ответу @ Rudi. PhilT 9 лет назад 1
0
ZaB

Разрешить - активировать "юнит", он же aka daemon aka service, при запуске 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 - это демон / служба, которую я хочу запустить при запуске. Это моя точка зрения, она запускается / останавливается, но не "включается". Rudi Visser 12 лет назад 0
0
john_a_s

В моей системе FC15, когда я запустил «systemctl enable mysqld.service», он автоматически вернулся с:

mysqld.service не является нативным сервисом, перенаправляя на / sbin / chkconfig. Выполнение / sbin / chkconfig mysqld в

Итак, попробуйте запустить: /sbin/chkconfig mysqld on

0
sugatang itlog

Если у вас есть ... при включении вашего сервисного модуля, скопируйте его в / etc / systemd / system

Failed to issue method call: No such file or directory 

Чтобы включить ваш сервисный модуль, добавьте ниже ..., чтобы вы могли включить систему mysqld.service (его включение в пространстве имен каждого пользователя)

[Install] WantedBy=multi-user.target 

Ура, сугатанг итлог