service コマンドについて調べてみた

業務で CentOS なサーバを触ることが多くなり、最近 service コマンド(以下 service)で daemon の起動等が出来る事を知った。Debian をずっと使ってきた身としては全然なじみが無くて

% sudo /etc/init.d/hoge start

で実行するのと

% sudo /sbin/service hoge start

で実行することの違いはなんだろうかと思った。そこで、service のソース*1を読んでみたところ、違いや便利な機能があることが分かった。

service で実行する時は一部の環境変数しか引き継がれない

/etc/init.d で実行する時には、すべての環境変数が有効なまま実行されるのに対して、service で実行する時には、以下の環境変数しか引き継がれない事が分かった。

  • LANG
  • PATH
  • TERM

env コマンドの -i オプションで上記環境変数以外を無効にしているからである。
これにより、/etc/init.d と service ではわずかながら違いがあることが分かった。

service の便利な機能

service には /etc/init.d 以下にあるすべての daemon の状態が確認できるオプションがある。

% sudo /sbin/service --status-all

これを実行すると、daemon 状態が一覧で表示される。個人的には便利だと思った。

まとめ

今回調査するまで、/etc/init.d と service は等価なものだと思ってて、自分が慣れてる/etc/init.d を使ってたけど、CentOS を使う時には service を使うように統一するのがいい気がする。