Linuxのコマンド実行で使うserviceとsystemctlの違いとは何か?

MySQL等を実行する時にservice mysql startとかsystemctl start mysql等のコマンドを使うけど、このserviceとかsystemctlとは何か、これらの違いはあるのかをまとめていく。

serviceやsystemctlとは何か?

serviceとsystemctlは、Linuxで楽にコマンドを実行するためのプログラム。

serviceは、/etc/init.dにあるシェルスクリプトのファイルを指定することで、シェルを実行してくれるもの。例えば、MySQLの実行時にservice mysql startとすると思うが、これは/etc/init.d/mysqlと言うシェルスクリプトにstartと言う引数を与えることで、mysqlを実行しているのだ。

一方、systemctlは/lib/systemdにある設定ファイルを指定して、コマンドを実行するもの。serviceと大きく異なる点は、serviceはシェルを実行するのに対してsystemctlは独自の設定ファイルを使って実行する点だ。

例えば、MySQLの設定ファイルは/lib/systemd/system/mysql.serviceに存在しており、内容は以下の通りになっている。

# MySQL systemd service file

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

[Install]
WantedBy=multi-user.target

[Service]
Type=forking
User=mysql
Group=mysql
PIDFile=/run/mysqld/mysqld.pid
PermissionsStartOnly=true
ExecStartPre=/usr/share/mysql/mysql-systemd-start pre
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
TimeoutSec=600
Restart=on-failure
RuntimeDirectory=mysqld
RuntimeDirectoryMode=755
LimitNOFILE=5000

色々書かれているが、ExecStartで指定したコマンドが実行される。

serviceとsystemctlはどちらを使えば良い?

どちらも使える状態であれば、systemctlを使うのが望ましい。なぜなら、systemctlは標準でenableと言うコマンドが入っており、systemctl enable mysqlとすることでOSが起動した時に自動でコマンドを実行してくれるようになるからだ。

もちろん、serviceでも他のプログラムを使う事でenableと同等の動きは可能だが、単純さで言うとsystemctlの方が軍配が上がる。

参考記事