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の方が軍配が上がる。