15

Я использую 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» не работает?

6 ответов6

19

mysqld.service - это "виртуальный" модуль - он не существует в файловой системе, это всего лишь часть уровня совместимости systemd. Вы можете запустить его, и systemd запустит устаревший /etc/rc.d/mysqld initscript, но вы не можете включить его в systemctl enable потому что вам нужен настоящий файл .service который может быть помещен в нужное место.

Вы можете написать такой модуль самостоятельно и поместить его в /etc/systemd/system/mysqld.service:

[Unit]
Description=MySQL Server
After=network.target

[Service]
ExecStart=/usr/bin/mysqld --defaults-file=/etc/mysql/my.cnf --datadir=/var/lib/mysql --socket=/var/run/mysqld/mysqld.sock
User=mysql
Group=mysql
WorkingDirectory=/usr

[Install]
WantedBy=multi-user.target

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


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

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

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

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

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

0

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

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

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

0

Включить - это активировать "unit" 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)
0

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

Failed to issue method call: No such file or directory

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

[Install]
WantedBy=multi-user.target

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .