systemctl enableはsystemctl startとは異なりますか?


16

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

「有効化」が機能しない理由について誰かが考えていますか?

回答:


19

mysqld.service「仮想」ユニットであり、ファイルシステム上には存在せず、systemdの互換性レイヤーの一部にすぎません。これを起動するとsystemdがレガシー/etc/rc.d/mysqldinitscript を実行しますが、適切な場所にシンボリックリンクできるsystemctl enable実際の.serviceファイルが必要なため、起動できません。

あなたは自分でそのようなユニットを書いてそれを入れることができます/etc/systemd/system/mysqld.service

[単位]
Description = MySQLサーバー
After = network.target

[サービス]
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

[インストール]
WantedBy = multi-user.target

systemctl daemon-reload作成/変更後に実行します。


または、initscripts-systemdパッケージをインストールできます。これには、でarch-daemons.target定義されrc.confたサービスを自動的に開始する機能が含まれています。ただし、このパッケージはすぐになくなる可能性があるため、使用中のinitシステム用のネイティブ構成ファイルを用意することをお勧めします。


ありがとう!昨日、これに非常に似たmysqld.serviceを実際に作成しましたが、ExecStart / ExecStopの場合は/etc/rc.d/mysqld start / stopにパススルーします。他の誰かがそれを見つけた場合にも、私のバージョンを投稿します!ありがとう
ルディヴィッサー

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/


1
これは本当に彼の質問に答えません。これは、@ Rudiの回答に対するコメントのようです。
PhilT 14年

0

有効にすると、の起動時に「ユニット」別名デーモン別名サービスがアクティブになります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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.