web-dev-qa-db-ja.com

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

「有効化」が機能しない理由について誰かが何かアイデアを持っていますか?

16
Rudi Visser

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システムのネイティブ構成ファイルを使用することをお勧めします。

19
user1686

@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
3
Rudi Visser

注意:ホスト固有のユニットファイルは/etc/systemd/system/ではなく/lib/systemd/system/の下に配置してください。

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

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

2
Aquarelle

私のFC15システムで「systemctl enable mysqld.service」を実行すると、自動的に次のように戻りました。

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

だから実行してみてください:/sbin/chkconfig mysqld on

0
john_a_s

有効にすると、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
ZaB

サービスユニットを有効にするときに...がある場合は、それを/ etc/systemd/systemにコピーします。

Failed to issue method call: No such file or directory

サービスユニットを有効にするには、...の下にmysqld.serviceをシステムで有効にできるように追加します(すべてのユーザーのネームスペースで有効にする)

[Install]
WantedBy=multi-user.target

乾杯、スガタンitlog

0
sugatang itlog