Linuc102メモ⑬システムサービス

システム時刻とハードウェア時刻

  • ハードウェア時刻=ハードに内蔵された時計が表示する時刻。
    この時計は、電源オフの状態でも動作する。

  • システム時刻=LInuxカーネル内の時計が表示する時刻。

date

システム時刻を参照して現在時刻を表示。

root@Ubuntu-LInuc:/home/ken# date
2023812日 土曜日 20:37:34 JST
root@Ubuntu-LInuc:/home/ken# date +%Y
2023

hwclock

ハードウェア時刻の参照や設定を行う。

root@Ubuntu-LInuc:/home/ken# hwclock
2023-08-12 20:39:27.996341+09:00

timedatectl

systemdを採用したディストリビューションで日付と時刻、タイムゾーンを管理。

root@Ubuntu-LInuc:/home/ken# timedatectl status
               Local time:2023-08-12 20:43:58 JST
           Universal time:2023-08-12 11:43:58 UTC
                 RTC time:2023-08-12 11:43:58
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

timedatcl set-timezone タイムゾーン

root@Ubuntu-LInuc:/etc# timedatectl set-timezone Asia/Tokyo
root@Ubuntu-LInuc:/etc# timedatectl
               Local time:2023-08-13 11:27:54 JST
           Universal time:2023-08-13 02:27:54 UTC
                 RTC time:2023-08-13 02:27:54
                Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no


タイムゾーン

地域ごとに区分された標準時間帯を指す。
日本はグリニッジ標準時(UTC)より9時間早い時間帯になっている。

タイムゾーンの情報は以下ファイルに格納されている。

root@Ubuntu-LInuc:/usr/share/zoneinfo# ls
Africa      Cuba     GMT+0        Japan              NZ-CHAT     Turkey
America     EET      GMT-0        Kwajalein          Pacific     tzdata.zi
Antarctica  Egypt    GMT0         leapseconds        Poland      UCT
Arctic      Eire     Greenwich    leap-seconds.list  Portugal    Universal
Asia        EST      Hongkong     Libya              posix       US
Atlantic    EST5EDT  HST          localtime          posixrules  UTC
Australia   Etc      Iceland      MET                PRC         WET
Brazil      Europe   Indian       Mexico             PST8PDT     W-SU
Canada      Factory  Iran         MST                right       zone1970.tab
CET         GB       iso3166.tab  MST7MDT            ROC         zone.tab
Chile       GB-Eire  Israel       Navajo             ROK         Zulu
CST6CDT     GMT      Jamaica      NZ                 Singapore

tzconfig

「/etc/localtime」と「/etc/timezone」ファイルをまとめて設定できるコマンド。

NTPによる時刻設定

  • ハードウェア時刻もシステム時刻も正確さに欠ける

  • ネットワーク経由でクロックを同期するNTPを使い、ネット上にあるNTPサーバから正確な時刻を取得するのがベスト!

ntpdate

NTPサーバから正確な時刻を取得する。

root@Ubuntu-LInuc:/usr/share/zoneinfo# ntpdate time1.google.com
12 Aug 20:55:56 ntpdate[28320]: adjust time server 216.239.35.0 offset +0.005841 sec

ntpq

NTPサーバの状態を照会できる。

root@Ubuntu-LInuc:/usr/share/zoneinfo# ntpq -p localhost
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 0.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000   +0.000   0.000
 1.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000   +0.000   0.000
 2.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000   +0.000   0.000
 3.ubuntu.pool.n .POOL.          16 p    -   64    0    0.000   +0.000   0.000
 ntp.ubuntu.com  .POOL.          16 p    -   64    0    0.000   +0.000   0.000

Chrony

ntpd/ntpdateの代替となるサーバ/クライアントソフトウェア。
デーモンプロセス「chronyd
クライアントコマンド「crynonyc
RHEL7やCentOS7以降では標準の時刻同期システム。

chronyc

chronyc activity NTPサーバのオンライン/オフラインの数を表示

root@Ubuntu-LInuc:/usr/share/zoneinfo# chronyc activity
200 OK
8 sources online
0 sources offline
0 sources doing burst (return to online)
0 sources doing burst (return to offline)
0 sources with unknown address

システムログの設定

PCの動作状況の記録をログという。
Linuxではsyslog使っていだけど、現在のディストリビューションではryslog使うようになった。

rsyslog

設定ファイルは、/etc/rsyslog.confファイルおよびrsyslog.dディレクトリ以下のファイルで行う。

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*

# rsyslog configuration file

# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

#### MODULES ####

# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
#$ModLoad imklog # reads kernel messages (the same are read from journald)
#$ModLoad immark  # provides --MARK-- message capability

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

ファシリティ

  • ログメッセージの生成元のプログラムは、メッセージにタグ付けをする

  • タグにはファシリティとプライオリティがある

  • ファシリティの種類(一部)
    auth,authpriv 認証システム(login)による出力
    cron  cronによる出力
    kern カーネルによる出力

プライオリティ

  • メッセージの重要度を表す

  • プライオリティを低くすればするほどログとして出力される情報量が多くなる

  • プライオリティの種類(一部)
    emerg 緊急事態
    alert 早急に対処が必要な事態
    crit システムの処理は継続できるものの深刻な事態
    err 一般的なエラー
    none ログを記録しない

出力先

メッセージの出力先は、ログファイルやユーザや端末、他のホストなどを選択できる。
これをアクションフィールドとよぶ。
/var/log/messages ログファイルに出力
/dev/tty1 コンソール(tty1)に出力

ためしにmessagesの中身をのぞいてみた

Aug  7 06:02:14 CentOS7 NetworkManager[697]: <info>  [1691413334.9379] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug  7 06:02:14 CentOS7 NetworkManager[697]: <info>  [1691413334.9393] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug  7 06:05:59 CentOS7 NetworkManager[697]: <info>  [1691413559.5792] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug  7 06:05:59 CentOS7 NetworkManager[697]: <info>  [1691413559.5794] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug  7 06:06:47 CentOS7 NetworkManager[697]: <info>  [1691413607.0658] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug  7 06:06:47 CentOS7 NetworkManager[697]: <info>  [1691413607.0660] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug  7 06:07:03 CentOS7 NetworkManager[697]: <info>  [1691413623.0234] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug  7 06:07:03 CentOS7 NetworkManager[697]: <info>  [1691413623.0244] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug  7 06:07:18 CentOS7 NetworkManager[697]: <info>  [1691413638.9948] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug  7 06:07:18 CentOS7 NetworkManager[697]: <info>  [1691413638.9961] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug  7 06:10:01 CentOS7 systemd: Started Session 1933 of user root.

logger

ログメッセージを生成するコマンド。
試しにメッセージを生成してみた。

[root@CentOS7 log]# logger -p syslog.info -t Test "looger testcat messages"

生成したメッセージを確認してみた。

[root@CentOS7 log]# cat messages
Aug 12 20:13:04 CentOS7 NetworkManager[697]: <info>  [1691896384.9593] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug 12 20:13:04 CentOS7 NetworkManager[697]: <info>  [1691896384.9606] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug 12 20:13:51 CentOS7 Test: looger testcat messages

systemd-cat

コマンドの実行結果をジャーナルに書き込むことができる

[root@CentOS7 log]# systemd-cat uptime
[root@CentOS7 log]# journalctl -xe
8月 12 20:19:59 CentOS7 NetworkManager[697]: <info>  [1691896799.0225] policy:
 8月 12 20:20:01 CentOS7 uptime[6624]: 20:20:01 up 14 days,  5:58,  2 users,  lo

ログの調査

システムの利用状況やソフトウェアの動作に異常がないかを確認。

tail -f

ファイルの追記を監視するため、待機する。
追記があった場合は、追記の分を表示する。

[root@CentOS7 log]# tail -f messages
et-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug 12 23:09:19 CentOS7 NetworkManager[697]: <info>  [1691906959.0983] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug 12 23:09:19 CentOS7 NetworkManager[697]: <info>  [1691906959.0984] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
Aug 12 23:10:01 CentOS7 systemd: Started Session 2452 of user root.

grep 「文字列」「ファイル名」

[root@CentOS7 log]# grep ene messages
Aug  8 18:32:28 CentOS7 NetworkManager[697]: <info>  [1691544748.0965] device (ens33): DHCPv6 lease renewal requested
Aug 11 06:39:45 CentOS7 NetworkManager[697]: <info>  [1691761185.1190] device (ens33): DHCPv6 lease renewal requested

journalctl

systemdのログ(ジャーナル)を閲覧。

[root@CentOS7 log]# journalctl -f
-- Logs begin at 日 2023-07-16 07:32:22 PDT. --
 812 23:09:19 CentOS7 NetworkManager[697]: <info>  [1691906959.0983] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
 812 23:09:19 CentOS7 NetworkManager[697]: <info>  [1691906959.0984] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
 812 23:10:01 CentOS7 systemd[1]: Started Session 2452 of user root.
 812 23:10:01 CentOS7 CROND[16329]: (root) CMD (/usr/lib64/sa/sa1 1 1)
 812 23:12:47 CentOS7 NetworkManager[697]: <info>  [1691907167.5600] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
 812 23:12:47 CentOS7 NetworkManager[697]: <info>  [1691907167.5602] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
 812 23:13:13 CentOS7 NetworkManager[697]: <info>  [1691907193.1514] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
 812 23:13:13 CentOS7 NetworkManager[697]: <info>  [1691907193.1518] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
 812 23:13:29 CentOS7 NetworkManager[697]: <info>  [1691907209.1137] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'
 812 23:13:29 CentOS7 NetworkManager[697]: <info>  [1691907209.1139] policy: set-hostname: current hostname was changed outside NetworkManager: 'CentOS7'

ログファイルのローテーション

  • ログファイルは放置していると容量が肥大化していくのを防ぐための機能

  • ある一定までラインまで容量がたまったら、そのファイルを保存して、別ファイルを作成する。ファイル1、ファイル2といった具合に増えていく。

  • 規定されたファイル数に到達したら、一番古いファイルは削除される

  • logrotateユーティリティが提供している機能

  • logrotateコマンドを使用すると直ちに指定ファイルのログローテーションを実施できる

メール管理

メール配送の仕組み

  1. クライアント:MUA(Mail User Agent)

  2. メールサーバ:MTA①

  3. メールサーバ:MTA②→MDA→メールボックス→POPサーバ

  4. クライアント:MUA

MTAとメールキューの管理(mailq)

  • システムによってどのMTAプログラムを使用しているか異なる

  • netstatを使えばどのプログラムを使用しているか分かる

[root@CentOS7 log]# netstat -atnp | grep 25
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1388/master
tcp6       0      0 ::1:25                  :::*                    LISTEN      1388/master

masterはPostfixの中心的なデーモンである。

  • 送信待ちのメールはメールキューに蓄積される

  • メールキューの内容を表示するコマンドはmailq

[root@CentOS7 log]# mailq
Mail queue is empty

メールの送信と確認

  • mail [-s 題名][宛先メールアドレスorホスト名]

  • mailコマンドで引数なしで実行するとメールボックスに届いてるメールを確認できる

メールの転送とエイリアス

  • /etc/aliasesファイルを利用すると。メールアドレスの別名(エイリアス)を設定できる

  • newaliasesコマンドを使うことで有効にできる

  • 各ユーザのホームディレクトリに.forwardファイルを用意し、その中に転送先メールアドレスを記載することで、転送できる。
    一時的に転送したいときなどに使う。


この記事が気に入ったらサポートをしてみませんか?