CentOS7のsystemd/systemctlコマンドと
設定ファイルの関係と絵にしてみる。
ついでに、jorunaldの動きも絵にした。
twitter:@to_takada
systemd/systemctlコマンドとUnit定義ファイル①
/usr/lib/systemd/system/ /etc/systemd/system
multi-user.target
httpd.service
httpd.servi...
systemd/systemctlコマンドとUnit定義ファイル②
/usr/lib/systemd/system/ /etc/systemd/system
multi-user.target
httpd.service
httpd.servi...
systemd/systemctlコマンドとUnit定義ファイル③
/usr/lib/systemd/system/ /etc/systemd/system
multi-user.target
httpd.service
Unit定義ファイル
...
自前でコンパイルしたプログラムはどーしよう????
<手順>
1. systemdの設定ファイル(Unit定義ファイル)を、SERVICENAME.service(例
named.service)として/usr/lib/systemd/syst...
BindのUnit定義ファイルの例
[unit] #起動順序(依存関係/順序関係)を記載
Description=Berkeley Internet Name Domain (DNS) #説明文
Wants=nss-lookup.target ...
比較的簡単にUNIT定義ファイルを用意する方法
いちから、Unit定義ファイルを作るのは難しいので、
rpmパッケージをダウンロードしてきて、同梱されているUnit定義
ファイルを編集するのが、一番簡単かもしれません。
#yum install...
journald(systemd-jounald)によるロギング
/dev/log(UNIXソケット)
rsyslogd
プロセス
/dev/log(UNIXソケット)
rsyslogd
プロセス
systemd-journald
/run/l...
Upcoming SlideShare
Loading in …5
×

Centos7 systemd

5,025 views

Published on

Published in: Technology

Centos7 systemd

  1. 1. CentOS7のsystemd/systemctlコマンドと 設定ファイルの関係と絵にしてみる。 ついでに、jorunaldの動きも絵にした。 twitter:@to_takada
  2. 2. systemd/systemctlコマンドとUnit定義ファイル① /usr/lib/systemd/system/ /etc/systemd/system multi-user.target httpd.service httpd.service Unit定義ファイル 起動方法などを記述 システムデフォルト の設定が格納される Dir Systemdが”優先的” に参照する設定が格 納されるDir#systemctl enable httpd (#chkconfig httpd on) シンボリックリンクの作成 シンボリックリンク httpd.service #systemctl disable httpd (#chkconfig httpd off) シンボリックリンクの削除 Runlevel3相当で自動 起動するサービスを定 義するDir systemd #systemctl start/stop/restart/status httpd (#service httpd start/stop/restart/status) システム起動時に参照
  3. 3. systemd/systemctlコマンドとUnit定義ファイル② /usr/lib/systemd/system/ /etc/systemd/system multi-user.target httpd.service httpd.service Unit定義ファイル 起動方法などを記述 システムデフォルト の設定が格納される Dir Systemdが”優先的” に参照する設定が格 納されるDir #systemctl enable httpd (#chkconfig httpd on) シンボリックリンクの作成 シンボリックリンク httpd.service #systemctl disable httpd (#chkconfig httpd off) シンボリックリンクの削除 Runlevel3相当で自動 起動するサービスを定 義するDir systemd#systemctl start/stop/restart/status httpd (#service httpd start/stop/restart/status) システム起動時に参照 httpd.service • 同じサービスのUnit定義ファイルが、両方のDirにあ る場合は、/etc/systemd/systemのほうが優先され る。 • 管理者が、サービス設定を変えたい場合は、Unit定 義ファイルを/etc/systemd/systemにコピーし、コ ピー先を変更するとよい。 手動で コピーして編集した もの
  4. 4. systemd/systemctlコマンドとUnit定義ファイル③ /usr/lib/systemd/system/ /etc/systemd/system multi-user.target httpd.service Unit定義ファイル 起動方法などを記述 システムデフォルト の設定が格納される Dir systemdが”優先的” に参照する設定が格 納されるDir systemd • systemctl mask SERVICE_NAMEコマンドでは、 /etc/systemd/system配下に当該サービス名のUNIT定 義ファイルを、/dev/nullへのシンボリックとして作 成する。 • /usr/lib/systemd/system/以下のデフォルトの定義 ファイルより優先されるため、結果、systemctlコマ ンドからの制御(起動/停止等)が無効となる #systemctl mask httpd /dev/nullへのシンボリックリン クを作成 /dev/null httpd.service #systemctl start/stop/restart/status httpd (#service httpd start/stop/restart/status) が無効となる
  5. 5. 自前でコンパイルしたプログラムはどーしよう???? <手順> 1. systemdの設定ファイル(Unit定義ファイル)を、SERVICENAME.service(例 named.service)として/usr/lib/systemd/system/以下に配置します。 2. “systemctl daemon-reload”コマンドでsystemdに反映します。 3. “systemctl enable SERVICE NAME”で自動起動設定 パッケージ管理システム(yum/rpm)で入れたサービスは、”systemctl”コマンドでそ のまま制御できますが、自前でコンパイルしたプログラムは、Unit定義ファイルを 用意する必要があります。
  6. 6. BindのUnit定義ファイルの例 [unit] #起動順序(依存関係/順序関係)を記載 Description=Berkeley Internet Name Domain (DNS) #説明文 Wants=nss-lookup.target #同時に有効化が必要な前提Unit(前提Unitが起動に失敗しても、このUnitは起動させる) Before=nss-lookup.target #このUnit(BIND)の後で起動させるUnit After=network.target #このUnit(BIND)の前に起動させるUnit [service] #対象サービスの振る舞いを定義 Type=forking #バックグラウンド実⾏の場合はforking PIDFile=/var/named/chroot/var/run/named/named.pid #メインプロセスのPIDファイル ExecStartPre=/usr/local/bind/sbin/named-checkconf -t /var/named/chroot -z /etc/named.conf #サービス起動前の追加コマンド(起動判定無) ExecStart=/usr/local/bind/sbin/named -u named -t /var/named/chroot -c /etc/named.conf #サービス起動コマンド ExecReload=/bin/sh -c ‘/usr/local/bind/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID‘ #サービスリロードコマンド ExecStop=/bin/sh -c ‘/usr/local/bind/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID‘ #サービス停止コマンド(異常時にも実⾏) PrivateTmp=false #独自のtmpディレトリを使用するか [install] #”systemctl enable”発⾏時の挙動を記載 WantedBy=multi-user.target #enable時にこのUnitの.wantsディレクトリにシンボリックリンクを作成する== # multi-user.target(ランレベル3)の時に一緒に有効化する
  7. 7. 比較的簡単にUNIT定義ファイルを用意する方法 いちから、Unit定義ファイルを作るのは難しいので、 rpmパッケージをダウンロードしてきて、同梱されているUnit定義 ファイルを編集するのが、一番簡単かもしれません。 #yum install --downloadonly --downloaddir=/var/tmp/ bind #rpm2cpio bind-9.9.4-14.el7.x86_64.rpm |cpio -idv Unit定義ファイルを含むRPMがなかった場合は。。。。 がんばって自前でつくるしかないですよね。
  8. 8. journald(systemd-jounald)によるロギング /dev/log(UNIXソケット) rsyslogd プロセス /dev/log(UNIXソケット) rsyslogd プロセス systemd-journald /run/log/journal/ CentOS6 CentOS7 バイナリファイル imjournal rsyslogモジュール • RHEL/CentOS7では、syslogではなく独 自のログ機構(journald)を保持しています。 • journarldは、出⼒内容にメタ情報を追加 して、バイナリファイル(/run/log/journal) 以下に書き出します。 • rsyslogは、imjournalモジュールを使って、 バイナリファイルからメッセージを取り 出し、rsyslogdに渡します ※ /run/log/journalは、tmpfs領域なので、再起動すると消えます ※ /var/log/journalディレクトリを作成すると、再起動以降は、永 続的にファイルがここに書き込まれます。

×