サービスの管理を行うsystemctlコマンドについて調べてた

ISUCON9の練習をするため、Vagrant ISUCONを利用しました。チームはGoで参加するので、初期実装はPythonでした。言語を切り替える方法がわからず、悪戦苦闘していたのですがsystemctlコマンドを用いることで実現できることがわかりました。

解決する過程で、systemctlについて学んだことをまとめます。

systemctl

systemctlコマンドは、サービスの管理を行うコマンドです。

Apache HTTP Serverを起動するためのコマンドにsystemctl start httpdがあるように、かなり身近なコマンドであることがわかります。

man systemctlすると、頻繁に利用しそうなコマンドがわかりました。

コマンド 意味
stop サービスの停止
start サービスを開始
restart サービスを再起動
status サービスの状態を確認する
enable サービスを有効にする
disable サービスを無効にする

Vagrant ISUCON7の言語切り替え

まず、初めに管理しているサービスを把握する必要があるため

systemctlまたはsystemctl list-unitsを実行します。すると、たくさんのサービスが存在していることがわかりました。

systemctl list-units --helpからtype指定をすることで、絞り込みができることがわかります。

Unit Commands:
systemctl [OPTIONS...] {COMMAND} ...

Query or send control commands to the systemd manager.

  -h --help           Show this help
     --version        Show package version
     --system         Connect to system manager
     --user           Connect to user service manager
  -H --host=[USER@]HOST
                      Operate on remote host
  -M --machine=CONTAINER
                      Operate on local container
  -t --type=TYPE      List units of a particular type
  
  ......

typeは、systemctl list-unitsで下記のような出力された時の2番目の文字を指定できます。

  • system-getty.slice
    • type=slice
  • ssh.service
    • type=service

以上からsystemctl list-units --type=serviceを実行するとisubata.golang.serviceという、いかにも言語切り替えに必要なサービスがあることがわかりました。

表示をわかりやすくするため、systemctl list-unit-filesに切り替え、systemctl list-units --type=service | grep isubataをすると、pythonが動いていることがわかります。

isubata.golang.service                     disabled
isubata.nodejs.service                     disabled
isubata.perl.service                       disabled
isubata.php.service                        disabled
isubata.ruby.service                       disabled
isubata.python.service                     enabled 

ここまでくれば、python実装のサービスを無効化し好きな言語を有効化すれば、言語が切り替わります。

sudo systemctl disabled isubata.python.service
sudo systemctl enabled isubata.golang.service

systemctlについての詳細な説明は、参考文献をご覧下さい。

参考文献

10.2. システムサービスの管理

いまさらだけどsystemdに入門した

「Systemd」を理解する ーシステム管理編ー

CentOS7 systemctlコマンドの使い方