Arch Linux(最新、最新)ボックスを実行していて、MySQLを起動時に起動しようとしています。 systemdパッケージをインストールすると、systemctlを使用できるようになるため、次のようなことができます。
systemctl start mysqld.service
systemctl [stop|status|restart] mysqld.service
それは問題なく、手動で開始/停止したい場合はうまく機能しますが、起動時にそれを開始することになると(systemctlで 'enable'を使用すると、厄介な出力が表示されます):
[root@rudivarch ~]# systemctl enable mysqld.service
Failed to issue method call: No such file or directory
明らかに、他のコマンドはうまく機能するので、私はこれにひどく混乱し、それを理解しようとする間、かなりの時間を費やしています... systemctl statusはこれを出力します:
[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
「有効化」が機能しない理由について誰かが何かアイデアを持っていますか?
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
パッケージをインストールできます。ただし、このパッケージはすぐになくなる可能性があり、initシステムのネイティブ構成ファイルを使用することをお勧めします。
@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
注意:ホスト固有のユニットファイルは/etc/systemd/system/
ではなく/lib/systemd/system/
の下に配置してください。
後者はディストリビューション固有のものです。前者は自分で設定するホスト固有のもの用です。それぞれ/usr/bin/
と/usr/local/bin/
のようなものです。
したがって、パッケージが単体ファイル(/lib/systemd/system/
の下)を単独でインストールしない限り、独自の「カスタム」のものを/etc/systemd/system/
の下に配置します。
私のFC15システムで「systemctl enable mysqld.service」を実行すると、自動的に次のように戻りました。
mysqld.serviceはネイティブサービスではなく、/ sbin/chkconfigにリダイレクトします。/sbin/chkconfig mysqldを実行
だから実行してみてください:/sbin/chkconfig mysqld on
有効にすると、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)
サービスユニットを有効にするときに...がある場合は、それを/ etc/systemd/systemにコピーします。
Failed to issue method call: No such file or directory
サービスユニットを有効にするには、...の下にmysqld.serviceをシステムで有効にできるように追加します(すべてのユーザーのネームスペースで有効にする)
[Install]
WantedBy=multi-user.target
乾杯、スガタンitlog