Centos7 systemd
-
Upload
tomonori-takada -
Category
Technology
-
view
3.572 -
download
5
Transcript of Centos7 systemd
CentOS7のsystemd/systemctlコマンドと設定ファイルの関係と絵にしてみる。
ついでに、jorunaldの動きも絵にした。
twitter:@to_takada
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)
システム起動時に参照
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相当で自動起動するサービスを定
義するDirsystemd#systemctl start/stop/restart/status httpd
(#service httpd start/stop/restart/status)
システム起動時に参照
httpd.service
• 同じサービスのUnit定義ファイルが、両方のDirにある場合は、/etc/systemd/systemのほうが優先される。
• 管理者が、サービス設定を変えたい場合は、Unit定義ファイルを/etc/systemd/systemにコピーし、コピー先を変更するとよい。
手動でコピーして編集した
もの
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)
が無効となる
自前でコンパイルしたプログラムはどーしよう????
<手順>
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定義ファイルを用意する必要があります。
BindのUnit定義ファイルの例
[unit] #起動順序(依存関係/順序関係)を記載Description=Berkeley Internet Name Domain (DNS) #説明文Wants=nss-lookup.target #同時に有効化が必要な前提Unit(前提Unitが起動に失敗しても、このUnitは起動させる)Before=nss-lookup.target #このUnit(BIND)の後で起動させるUnitAfter=network.target #このUnit(BIND)の前に起動させるUnit
[service] #対象サービスの振る舞いを定義Type=forking #バックグラウンド実⾏の場合はforkingPIDFile=/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)の時に一緒に有効化する
比較的簡単に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がなかった場合は。。。。がんばって自前でつくるしかないですよね。
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ディレクトリを作成すると、再起動以降は、永続的にファイルがここに書き込まれます。