systemdによるCentOS 7の管理

2014年12月11日(木)
古賀 政純

ドロップインによるユニットのカスタマイズ

systemdには、サービスの起動・停止の制御や依存関係、起動順序の制御だけでなく、プロセス管理の挙動に関するパラメータを詳細に設定することが可能となっています。例えば、Apache Webサーバーで有名なhttpdサービスのパラメータは以下で確認することが可能です。

# systemctl show --all httpd

様々なパラメータが設定可能であることがわかります。しかし、特定のパラメータについて明示的に設定を行う場合には、ユーザー独自の設定ファイルに特定のパラメータのみを記述しておくとアプリケーションやサービスの運用管理が煩雑化しにくくなります。ここでは、httpdサービスにパラメータを個別に指定して管理する方法を紹介します。まず、systemdでは、ユーザー独自のパラメータを指定するためのディレクトリを作成します。httpd.serviceの場合は、httpd.service.dという名前のディレクトリを/etc/systemd/systemディレクトリの下に作成します。

# mkdir /etc/systemd/system/httpd.service.d/

次に、設定ファイルを作成します。今回は、10-httpd.confと言うファイル名にします。

# cd /etc/systemd/system/httpd.service.d/
# vi 10-httpd.conf
[Service]
Restart=always
CPUAffinity=0 1 2 3
OOMScoreAdjust=-1000

10-httpd.confファイルの先頭行に、[Service]を記述し、その下にパラメータを記述します。このパラメータは、man systemd.execやman systemd.serviceで確認することができます。今回は、下記3つを指定しました。

Restart=alwaysサービスの正常終了しかに関わらず、サービスを再起動
CPUAffinity=0 1 2 3実行するプロセスのCPUアフィニティを設定(例はCPU0、1、2、3に固定)
OOMScoreAdjust=-1000「Out of Memory」発生時のプロセス制御(-1000でプロセスkillを無効)

設定ファイルを記述したら、デーモンを再起動します。

# systemctl daemon-reload

httpdサービスの状態を確認します。すると下図のようになり、「Drop-In:」の行に、先程作成したディレクトリと設定ファイルが読み込まれていることが分かります。これはsystemdにおける「ドロップイン」と呼ばれており、ユーザー独自でパラメータを明示的に指定する場合に利用される仕組みです。

図4:systemdのドロップインが利用されている様子。作成した10-httpd.confファイルがロードされていることがわかる(クリックで拡大)

ドロップインを利用したパラメータ設定を行った後は必ず、systemctl daemon-reloadが必要になりますので、注意して下さい。

ロケール、キーボード設定、日付・時間・タイムゾーン設定

CentOS 7は、ロケール、キーボード設定、日付・時間・タイムゾーンなどの設定もCentOS 6系と大きく異なります。CentOS 7では、ロケール、キーボードを設定するlocalectlコマンド、日付・時間・タイムゾーンを設定するtimedatectlコマンドが用意されています。設定ファイルもCentOS 6系とは異なりますので注意して下さい。

ロケールの変更

システムのロケールの変更は、localectlコマンドで行います。現在のロケールの状態を確認します。

# localectl
   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us

ロケールを日本語に設定し、変更されているかを確認します。

# localectl set-locale LANG=ja_JP.utf8
# localectl
   System Locale: LANG=ja_JP.utf8
       VC Keymap: us
      X11 Layout: us

ロケールの設定ファイルは、/etc/locale.confファイルになります。変更されているかどうかを確認します。

# cat /etc/locale.conf
LANG=ja_JP.utf8

キーボード設定

キーボード設定も、localectlコマンドで行います。利用可能なキーマップを表示します。

# localectl list-keymaps
...
...
jp106
...
unicode
us
us-acentos
wangbe
wangbe2
windowkeys

日本語のキーマップはjp106として利用可能です。 現在のキーボード設定を日本語106キーボードに設定します。

# localectl set-keymap jp106
[root@centos70n02 ~]# localectl
   System Locale: LANG=ja_JP.utf8
       VC Keymap: jp106
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp

キーマップの設定ファイルは、/etc/vconsole.confファイルになります。先述の設定が反映されているか確認してみます。

# cat /etc/vconsole.conf
FONT=latarcyrheb-sun16
KEYMAP=jp106

日付、時刻、タイムゾーンの設定

CentOS 7では、日付、時刻の設定コマンドとして従来のdateコマンドやhwclockコマンドが存在しますが、新しくsystemdで制御されるtimedatectlコマンドが用意されています。timedatectlコマンドをオプション無しで実行すると、現在の日付、時刻、タイムゾーン、NTPの同期設定の有無等を表示します。

# timedatectl
      Local time: 金 2014-09-05 19:41:11 JST
  Universal time: 金 2014-09-05 10:41:11 UTC
        RTC time: 金 2014-09-05 10:41:11
        Timezone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

日付を設定する場合は、timedatectlコマンドにset-timeオプションを指定します。以下は、2014年9月6日に設定する例です。

# timedatectl set-time 2014-09-06
# timedatectl
      Local time: 土 2014-09-06 00:00:00 JST
  Universal time: 金 2014-09-05 15:00:00 UTC
        RTC time: 金 2014-09-05 15:00:01
        Timezone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

時刻を設定する場合も、timedatectlコマンドにset-timeオプションを指定します。以下は、19時51分00秒に設定する例です。

# timedatectl set-time 19:51:00
# timedatectl
      Local time: 金 2013-09-06 19:51:00 JST
  Universal time: 金 2013-09-06 10:51:00 UTC
        RTC time: 金 2013-09-06 10:51:00
        Timezone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

日付と時刻を同時に設定する場合は、以下のように設定します。

# timedatectl set-time "2014-09-06 19:55:00"
# timedatectl
      Local time: 土 2014-09-06 19:55:01 JST
  Universal time: 土 2014-09-06 10:55:01 UTC
        RTC time: 土 2014-09-06 10:55:01
        Timezone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

タイムゾーンの表示は、timedatectlコマンドにlist-timezoneオプションを付与して実行します。

# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
...
...
Asia/Tokyo
...
...

タイムゾーンを変更するには、timedatectlコマンドにset-timezoneオプションを付与します。以下では、タイムゾーンとしてAsia/Tokyoを設定する例です。

# timedatectl set-timezone Asia/Tokyo

以上で、ランレベル、サービスの制御、ログ管理、ロケール、キーボード設定、日付・時間・タイムゾーン設定を紹介しました。これらは、すべてsystemdで提供される機能です。systemdがCentOS 7において、幅広いコンポーネントに渡って制御を行っていることが理解できます。systemdだけでも一冊の本になるぐらいの膨大な情報量になりますが、まずは、CentOS 5やCentOS 6系で自分が理解していた管理手法と同様のことをCentOS 7のsystemdで実現することを目指してみて下さい。

この連載が書籍になりました!
CentOS 7実践ガイド

古賀 政純 著
価格:3,000円+税
発売日:2015年2月25日発売
ISBN:978-4-8443-3753-9
発行:インプレスジャパン

CentOS 7実践ガイド

本書は、CentOS 7を取り巻く市場動向、CentOS 7が利用されるサーバーシステムの選定、CentOS 7の基礎、システム設計、OS管理やCentOS 7に対応したアプリケーションサーバーの構築手順などの勘所をご紹介します。連載では書ききれなかった本の内容、見どころが満載!

  • セキュリティ管理
  • チューニング
  • 自動インストール
  • Hadoop構築
  • GlusterFS
  • Ceph

Amazon詳細ページへImpress詳細ページへ

日本ヒューレット・パッカード株式会社 プリセールス統括本部 ソリューションセンター OSS・Linux担当 シニアITスペシャリスト

兵庫県伊丹市出身。1996年頃からオープンソースに携わる。2000年よりUNIXサーバーのSE及びスーパーコンピューターの並列計算プログラミング講師を担当。科学技術計算サーバーのSI経験も持つ。2005年、大手製造業向けLinuxサーバー提案で日本HP社長賞受賞。2006年、米国HPからLinux技術の伝道師に与えられる「OpenSource and Linux Ambassador Hall of Fame」を2年連続受賞。日本HPプリセールスMVPを4度受賞。現在は、Linux、FreeBSD、Hadoop等のOSSを駆使したスケールアウト型サーバー基盤のプリセールスSE、技術検証、技術文書執筆を担当。日本HPのオープンソース・Linuxテクノロジーエバンジェリストとして講演活動も行っている。Red Hat Certified Engineer、Red Hat Certified Virtualization Administrator、Novell Certified Linux Professional、EXIN Cloud Computing Foundation Certificate、HP Accredited Systems Engineer Cloud Architect、Red Hat Certified System Administrator in Red Hat OpenStack、Cloudera Certified Administrator for Apache Hadoop認定技術者。HP公式ブログ執筆者。趣味はレーシングカートとビリヤード

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています