RHCSAシリーズ:Yumパッケージ管理、Cronでのタスク自動化、およびシステムログの監視 – パート10

この記事では、Red Hat Enterprise Linux 7でパッケージのインストール、更新、削除方法について見ていきます。また、cronを使用してタスクを自動化する方法も説明し、なぜこれらがすべてのシステム管理者にとって重要なスキルであるかを教えることに焦点を当てたガイドを終了します。

RHCSA: Yum Package Management, Cron Job Scheduling and Log Monitoring – Part 10

Yumを介したパッケージの管理

すでにインストールされていないすべての依存関係とともにパッケージをインストールするには、次のようにします。

# yum -y install package_name(s)

ここで、package_name(s)は少なくとも1つの実際のパッケージ名を表します。

例えば、httpdmlocate(この順番で)をインストールするには、次のように入力します。

# yum -y install httpd mlocate

注意: 上記の例でyの文字は、実際のプログラムのダウンロードとインストールを行う前にyumが提示する確認プロンプトをバイパスします。希望しない場合は省略できます。

デフォルトでは、yumはOSアーキテクチャに一致するアーキテクチャのパッケージをインストールしますが、パッケージ名にそのアーキテクチャを追加することでオーバーライドすることができます。

例えば、64ビットシステムでは、yum install packagex86_64バージョンのパッケージをインストールしますが、利用可能な場合はyum install package.x8632ビットバージョンをインストールします。

パッケージをインストールしたい場合でも、正確な名前がわからないことがあります。 全体検索または検索オプションを使用して、パッケージ名および/または説明に特定のキーワードを検索できます。

たとえば、

# yum search log

は、名前や概要に「log」という単語が含まれるパッケージをインストール済みのリポジトリで検索します。一方で、

# yum search all log

は、パッケージの説明やurlフィールドにも同じキーワードを探します。

検索結果が表示されたら、インストール前にいくつかのパッケージに関する詳細情報を表示したい場合があります。その際には情報オプションが役立ちます:

# yum info logwatch
Search Package Information

次のコマンドを使用して定期的に更新をチェックできます:

# yum check-update

上記のコマンドは、更新が利用可能なインストール済みのパッケージをすべて返します。以下の画像の例では、rhel-7-server-rpmsのみが更新可能です:

Check For Package Updates

そのパッケージを単独で更新できます:

# yum update rhel-7-server-rpms

複数の更新可能なパッケージがある場合は、yum updateで一度にすべて更新できます。

次に、実行可能ファイルの名前がわかっているが、それを提供するパッケージがわからない場合は、yum whatprovides “*/[executable]”を使用して確認できます:

# yum whatprovides “*/ps2pdf”
Find Package Belongs to Which Package

パッケージを削除する場合は、yum remove パッケージを使用します。簡単でしょう?これにより、yumが完全で強力なパッケージマネージャーであることが示されます。

# yum remove httpd

読むこと: RHEL 7 パッケージ管理を管理するための 20 個の Yum コマンド

Good Old Plain RPM

RPM(別名RPM パッケージマネージャー、または元々RedHat パッケージマネージャー)は、スタンドアロンの.rpmパッケージ形式でパッケージをインストールまたは更新するためにも使用できます。

一般的には、パッケージがまだ存在しない場合はインストールし、インストールされている場合は更新を試みることを示す-Uvhフラグと共に使用され、操作が実行されている間に詳細な出力(-v)およびハッシュマークの進行状況バー(-h)を生成します。 たとえば、

# rpm -Uvh package.rpm

rpmのもう1つの典型的な使用法は、現在インストールされているパッケージのリストを生成することです:rpm -qa(すべてのクエリの略)。

# rpm -qa
Query All RPM Packages

読むこと: RHEL 7 でパッケージをインストールするための 20 の RPM コマンド

Cron を使用してタスクをスケジュールする

Linux および他の Unix のようなオペレーティングシステムには、定期的に実行されるタスク(つまり、コマンドやシェルスクリプト)をスケジュールするためのcronというツールが含まれています。 Cron は/var/spool/cronディレクトリを毎分チェックし、/etc/passwdのアカウントに基づいて名前が付けられたファイルをチェックします。

コマンドを実行する際、出力はcrontabの所有者にメールされます(またはMAILTO環境変数で指定されたユーザーに、/etc/crontabに存在する場合)。

Crontabファイル(crontab -eと入力してEnterを押すことで作成されます)は次の形式を持ちます:

Crontab Entries

したがって、月の2日目の午前2時15分にローカルファイルデータベース(locateが名前やパターンでファイルを検索するために使用される)を更新したい場合、次のcrontabエントリを追加する必要があります:

15 02 2 * * /bin/updatedb

上記のcrontabエントリは、「毎月2日目に/bin/updatedbを実行し、曜日に関係なく午前2時15分に実行する」と読み取れます。おそらくすでに推測しているように、星印はワイルドカード文字として使用されます。

クロンジョブを追加した後、前述のように/var/spool/cron内にrootという名前のファイルが追加されたことがわかります。そのファイルには、crondデーモンが実行すべきすべてのタスクがリストされています:

# ls -l /var/spool/cron
Check All Cron Jobs

上記の画像では、現在のユーザーのcrontabはcat /var/spool/cron/rootを使用して表示することもできます。また、

# crontab -l

より詳細な基準でタスクを実行する必要がある場合(たとえば、1日に2回または月に3回など)、cronを使用してそれを行うこともできます。

たとえば、/my/scriptを毎月1日と15日に実行し、出力を/dev/nullに送信する場合、次のように2つのcrontabエントリを追加できます:

01 00 1 * * /myscript > /dev/null 2>&1
01 00 15 * * /my/script > /dev/null 2>&1

しかし、作業をより簡単に保守するために、両方のエントリを1つに組み合わせることができます。

01 00 1,15 * *  /my/script > /dev/null 2>&1

前の例に続いて、/my/other/scriptを毎3か月の最初の日の1:30 amに実行することができます。

30 01 1 1,4,7,10 * /my/other/script > /dev/null 2>&1

しかし、「x」分、時間、日、または月ごとに特定のタスクを繰り返さなければならない場合は、所望の頻度で右の位置を割ることができます。次のcrontabエントリは、前のものとまったく同じ意味を持っています。

30 01 1 */3 * /my/other/script > /dev/null 2>&1

または、特定のジョブを固定頻度で実行するか、システムの起動後に実行する必要がある場合があります。ジョブを実行したい正確な時刻を示すために、5つのフィールドの代わりに次の文字列の1つを使用できます。

@reboot    	Run when the system boots.
@yearly    	Run once a year, same as 00 00 1 1 *.
@monthly   	Run once a month, same as 00 00 1 * *.
@weekly    	Run once a week, same as 00 00 * * 0.
@daily     	Run once a day, same as 00 00 * * *.
@hourly    	Run once an hour, same as 00 * * * *.

関連記事: RHEL 7でCronジョブをスケジュールする11のコマンド

ログの検索と確認

システムログは、/var/logディレクトリ内に配置されています(および回転しています)。Linuxファイルシステム階層標準によると、このディレクトリには、対応するデーモンによってシステムの運用中に書き込まれた、または適切なサブディレクトリ(以下の画像のaudithttpd、またはsambaなど)に書き込まれた、さまざまなログファイルが含まれています。

# ls /var/log
Linux Log Files Location

他の興味深いログには、dmesg(カーネルリングバッファからのすべてのメッセージを含む)、セキュア(ユーザー認証が必要な接続試行のログ)、メッセージ(システム全体のメッセージ)、wtmp(すべてのユーザーログインとログアウトの記録)があります。

ログは非常に重要で、システムで何が起こっているか、過去に何が起こったかをいつでも垣間見ることができます。これらはLinuxサーバーのトラブルシューティングとモニタリングにとって非常に貴重なツールであり、よくtail -fコマンドと一緒に使用され、ログに記録されたイベントをリアルタイムで表示します。

たとえば、カーネル関連のイベントを表示したい場合は、次のコマンドを入力します。

# tail -f /var/log/dmesg

Webサーバーへのアクセスを表示したい場合も同様です。

# tail -f /var/log/httpd/access.log

要約

パッケージを効率的に管理し、タスクをスケジュールし、システムの現在と過去の操作に関する情報をどこで見つけるかを知っていれば、驚きに出くわすことはあまりありません。この記事がこれらの基本的なスキルについて学ぶのをお手伝いできたら幸いです。

ご質問やコメントがある場合は、以下のお問い合わせフォームからお気軽にご連絡ください。

Source:
https://www.tecmint.com/yum-package-management-cron-job-scheduling-monitoring-linux-logs/