systemctl enable は systemctl start とどう違うのでしょうか?

systemctl enable は systemctl start とどう違うのでしょうか?

私は 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

「enable」が機能しない理由について何か考えはありますか?

答え1

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

このようなユニットを自分で書いて、次の場所に配置することができます/etc/systemd/system/mysqld.service

[ユニット]
説明=MySQL サーバー
後=ネットワーク.ターゲット

[サービス]
ExecStart=/usr/bin/mysqld --defaults-file=/etc/mysql/my.cnf --datadir=/var/lib/mysql --socket=/var/run/mysqld/mysqld.sock
ユーザー=mysql
グループ=mysql
作業ディレクトリ=/usr

[インストール]
WantedBy=マルチユーザー.ターゲット

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


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

答え2

@Grawity さんの回答は正しく、おそらくこれよりも優れていると思いますが、基本的には rc.d スクリプトに渡すことで昨日解決しました...

システム変数

[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

答え3

注意: ホスト固有のユニット ファイルは/etc/systemd/system/ではなく の下に置くことを忘れないでください/lib/systemd/system/

後者はディストリビューション固有のものであり、前者は自分で構成するホスト固有のものです。それぞれ、/usr/bin/と のようなものです/usr/local/bin/

したがって、パッケージがユニット ファイルを独自に ( の下に/lib/systemd/system/) インストールしない限り、独自の「カスタム」ファイルを の下に配置します/etc/systemd/system/

答え4

私の FC15 システムでは、「systemctl enable mysqld.service」を実行すると、自動的に次の結果が返されました。

mysqld.serviceはネイティブサービスではないため、/sbin/chkconfigにリダイレクトされます。/sbin/chkconfig mysqldを実行しています

それで、実行してみてください: /sbin/chkconfig mysqld on

関連情報