systemdタイマーの利用方法

タスク自動実行について

Linuxを使っていると、バックアップしたり、様々な自動化が必要だったりするが、昔からのCronを使う方法と最近のsystemdがあるCentOS等のLinuxの場合、Cronに比べて多少敷居が高い
が、Systemdタイマーを使うことをお勧めします。

systemdタイマーの利用方法(例としてsshに不正アクセスを試みるIPアドレスの拒否)

インターネットに接続されたサーバーの場合、TCPポートはsshのport22だけ開いている状況なのでまずは、ログインする。
sshのポートにはすぐに不審なアクセス(ボット)が来るので、systemdタイマーで1時間ごとに不審なIPアドレスをブロックする。

下記シェルスクリプトをスケジュールで実行される。
-rw-r--r--. 1 root root 56 1月 13 06:00 add_list.txt
-rw-r--r--. 1 root root 5980 1月 13 06:00 day_time.txt
-rwx------. 1 root root 903 12月 31 13:36 ip_reject.sh
-rw-r--r--. 1 root root 18394 12月 31 13:36 no_reject_ip_list.txt
-rwx------. 1 root root 1303 12月 31 13:37 reject_data_Generation.sh
-rw-r--r--. 1 root root 56 1月 13 06:00 temp.txt
-rw-r--r--. 1 root root 5980 1月 13 06:00 tmp_day_time.txt

systemdタイマーを使う場合、systemdのユニットでサービスとして実行する必要があるので以下を用意。
-rw-r--r-- 1 root root 165 1月 13 05:45 ip_reject.service
-rw-r--r-- 1 root root 138 1月 13 05:45 ip_reject.timer
-rw-r--r-- 1 root root 154 1月 13 05:45 reject_data_generation.service
-rw-r--r-- 1 root root 138 1月 13 05:45 reject_data_generation.timer
※これらのファイルは、/etc/systemd/system 配下に設置する。

◆ reject_data_generation.service内容
[Unit]
Description=Run reject_data_Generation.sh

[Service]
ExecStart=/root/reject_ip_sh/reject_data_Generation.sh

[Install]
WantedBy=multi-user.target

systemdによるサービスの定義を行うファイルです。(上記の説明)

[Unit]
Description=Run reject_data_Generation.sh

[Unit]セクションはサービスユニットの定義を行う。Descriptionで、reject_data_Generation.sh
を実行すると定義。
[Service]
ExecStart=/root/reject_ip_sh/reject_data_Generation.sh

[service]セクションは、サービスがどのように動作するかを定義する。
ExecStart はサービスが開始されたときに実行されるコマンドを指定しており、この場合は
/root/reject_ip_sh/reject_data_Generation.sh スクリプトが実行されます。

[Install]
WantedBy=multi-user.target

[Install]セクションは、サービスユニットがどのターゲットに関連付けられるかを定義します。
WantedBy はこのサービスユニットがどのターゲットの一部としてインストールされるべきかを
指定しています。

サービスを永続的に、および有効化する。
systemctl enable reject_data_generation.service
systemctl start reject_data_generation.service

◆ reject_data_generation.timer内容
[Unit]
Description=Run reject_data_Generation.sh every hour

[Timer]
OnCalendar=hourly
Persistent=true

[Install]
WantedBy=timers.target

reject_data_generation.timer は、systemdのタイマー単位です。タイマー単位は、特定の時間または間隔でサービスを起動するための仕組みを提供します。
例えば、毎日、毎時、または一定のインターバルでサービスを自動的に開始することができます。
(上記の説明。)

[Unit]
Description=Run reject_data_Generation.sh every hour

[Unit] セクションは systemd のサービスやタイマーの設定ファイルで、そのユニット(サービスやタイマー)の基本情報を提供します。ここでの Description は、このユニットの目的や内容を
説明するものです。
Description=Run reject_data_Generation.sh every hour では、Description 行は、このユニットが何をするのかを定義しています。
この場合、reject_data_Generation.sh を毎時実行する、という内容です。

[Timer]
OnCalendar=hourly
Persistent=true

OnCalendar=hourly この設定により、タイマーは毎時(毎時間)に実行されます。例えば、01:00、02:00、03:00、といった具合に毎時間実行されます。
hourly は簡潔な指定方法で、1時間ごとにタイマーを起動します。
Persistent=true システムが再起動された場合やタイマーが一時的に中断された場合でも、次にタイマーが有効になるときにすべての予定されたジョブが実行されます。
これにより、システムのダウンタイムがあってもタイマーが確実に実行されることを保証します。

[Install]
WantedBy=timers.target

[Install]セクションは、サービスやタイマーをどのターゲット(対象)に関連付けるかを指定します。
WantedBy=timers.target このタイマーがどのターゲットに属するかを定義します。この場合、timers.target に関連付けられていることを意味します。
timers.targetは、システムが起動する際にタイマーを一括して有効にするための特殊なターゲットです。これにより、システムが起動した際にこのタイマーが自動的に起動されます。
timers.targetに設定することで、このタイマーが他のタイマーと一緒に管理され、システムの起動時に一括して有効化されるようになります。

タイマーを永続的に、および有効化する。
systemctl enable reject_data_generation.timer
systemctl start reject_data_generation.timer

◆ip_reject.serviceとip_reject.timerを永続的に有効化する
systemctl enable ip_reject.service
systemctl enable ip_reject.timer
systemctl start ip_reject.timer

これで、sshポートへの不正アクセスを試みるIPアドレスを接続禁止に出来る。
今回は、.service と .timer の記載の仕方を説明した。自動化シェルスクリプトをタイマー実行する際には、同じような書き方で対応出来ると思う。