0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

タイマの使い方

Last updated at Posted at 2021-03-07

#1 はじめに
以下の2通りの方法でタイマの動作確認をしてみます。
・systemd-runコマンド
・タイマユニットファイル、サービスユニットファイル

#2 環境
VMware Workstation 15 Player上の仮想マシンを使いました。
仮想マシンの版数は以下のとりです。

CentOSの版数
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 8.3.2011
カーネル版数
[root@server ~]# uname -r
4.18.0-240.el8.x86_64

#3 systemd-runコマンドを使う方法

##3.1 モノトニックタイマの使い方

###3.1.1 1回だけ実行する場合
systemd-runの実行結果を確認するため、journalctlコマンドを実行します。

ログの確認
[root@server ~]# journalctl -f

ターミナルをもう1つオープンします。
タイマを起動してから5秒後にloggerコマンドを1回だけ実行してみます。
タイマの精度は100msに設定しました。タイマの精度を指定しないと、精度は1分になるようです。

タイマの起動
[root@server ~]# systemd-run --on-active=5 --timer-property=AccuracySec=100ms /usr/bin/logger TEST
Running timer as unit: run-r82de50047a7848959a1307f06cfd6244.timer
Will run service as unit: run-r82de50047a7848959a1307f06cfd6244.service

タイマを起動してから5秒後にTESTが出力されていることがわかります。

実行結果
[root@server ~]# journalctl -f
 3月 03 22:20:35 server systemd[1]: Started /usr/bin/logger TEST.
 3月 03 22:20:40 server systemd[1]: Started /usr/bin/logger TEST.
 3月 03 22:20:40 server root[123185]: TEST
 3月 03 22:20:40 server systemd[1]: run-r82de50047a7848959a1307f06cfd6244.service: Succeeded.
 3月 03 22:20:40 server systemd[1]: run-r82de50047a7848959a1307f06cfd6244.timer: Succeeded.

###3.1.2 定期的に実行する場合
タイマを起動してから5秒後にloggerコマンドを実行し、その後、
2秒間隔でloggerコマンドを実行してみます。

タイマの起動
[root@server ~]# systemd-run --on-active=5 --on-unit-active=2  --timer-property=AccuracySec=100ms /usr/bin/logger TEST

タイマを起動してから5秒後にTESTが出力され、その後、
2秒間隔でTESTが出力されていることがわかります。

実行結果
[root@server ~]# journalctl -f
 3月 03 22:21:57 server systemd[1]: Started /usr/bin/logger TEST.
 3月 03 22:22:02 server systemd[1]: Started /usr/bin/logger TEST.
 3月 03 22:22:02 server root[123195]: TEST
 3月 03 22:22:02 server systemd[1]: run-rd31c925c098042a69aa6b5cb75484101.service: Succeeded.
 3月 03 22:22:04 server systemd[1]: Started /usr/bin/logger TEST.
 3月 03 22:22:04 server root[123202]: TEST
 3月 03 22:22:04 server systemd[1]: run-rd31c925c098042a69aa6b5cb75484101.service: Succeeded.
 3月 03 22:22:06 server systemd[1]: Started /usr/bin/logger TEST.
 3月 03 22:22:06 server root[123204]: TEST
 3月 03 22:22:06 server systemd[1]: run-rd31c925c098042a69aa6b5cb75484101.service: Succeeded.
 3月 03 22:22:08 server systemd[1]: Started /usr/bin/logger TEST.
 3月 03 22:22:08 server root[123206]: TEST
 3月 03 22:22:08 server systemd[1]: run-rd31c925c098042a69aa6b5cb75484101.service: Succeeded.
 3月 03 22:22:10 server systemd[1]: run-rd31c925c098042a69aa6b5cb75484101.timer: Succeeded.
 3月 03 22:22:10 server systemd[1]: Stopped /usr/bin/logger TEST.

タイマを停止します。

タイマの停止
[root@server ~]# systemctl stop run-rd31c925c098042a69aa6b5cb75484101.timer

##3.2 カレンダータイマの使い方

###3.2.1 タイマを毎分起動する方法
7時1分、7時2分というように、毎分タイマを起動してみます。
タイマの精度(AccuracySec)は1分にしてみました。
なお、--on-calendarの書式は、年-月-日 時:分:秒です。

タイマの起動
[root@server ~]# systemd-run --on-calendar='*-*-* *:*:00' --timer-property=AccuracySec=1s logger TEST

22時33分,22時34分,22時35分というように、毎分タイマが起動され、loggerコマンドが
実行されていることがわかります。

実行結果
[root@server ~]# journalctl -f
 3月 03 22:32:16 server systemd[1]: Started /usr/bin/logger TEST.
 3月 03 22:33:00 server systemd[1]: Started /usr/bin/logger TEST.
 3月 03 22:33:00 server root[123452]: TEST
 3月 03 22:33:00 server systemd[1]: run-r9d13b8ecb9b54d6f80717b8a52ace8be.service: Succeeded.
 3月 03 22:34:00 server systemd[1]: Started /usr/bin/logger TEST.
 3月 03 22:34:00 server root[123462]: TEST
 3月 03 22:34:00 server systemd[1]: run-r9d13b8ecb9b54d6f80717b8a52ace8be.service: Succeeded.
 3月 03 22:35:00 server systemd[1]: Started /usr/bin/logger TEST.
 3月 03 22:35:00 server root[123470]: TEST
 3月 03 22:35:00 server systemd[1]: run-r9d13b8ecb9b54d6f80717b8a52ace8be.service: Succeeded.

タイマを停止します。

タイマの停止
[root@server ~]# systemctl stop run-r854d2350edc84d9b90dcac664ebd723e.timer

###3.2.2 タイマを指定した秒で起動する方法
タイマを毎分の0秒,15秒,30秒,45秒で起動してみます。

タイマの起動
[root@server ~]# systemd-run --on-calendar='*-*-* *:*:0,15,30,45' --timer-property=AccuracySec=1s logger -p crit TEST
実行結果
[root@server ~]# journalctl -f -p crit
-- Logs begin at Wed 2021-03-03 20:22:13 JST. --
 3月 03 22:42:30 server root[123641]: TEST
 3月 03 22:42:45 server root[123644]: TEST
 3月 03 22:43:00 server root[123648]: TEST
 3月 03 22:43:15 server root[123657]: TEST

タイマを停止します。

タイマの停止
[root@server ~]# systemctl stop run-r854d2350edc84d9b90dcac664ebd723e.timer

###3.2.3 タイマを指定した時、分、秒で起動する方法
ここでは、タイマを2021年3月3日の23時10分00秒に起動してみます。

タイマの起動
[root@server ~]# systemd-run --on-calendar='2021-03-03 23:10:00' --timer-property=AccuracySec=1s logger -p crit TEST
実行結果
[root@server ~]# journalctl -f -p crit
-- Logs begin at Wed 2021-03-03 20:22:13 JST. --
 3月 03 23:10:00 server root[124336]: TEST

#4 タイマユニット、サービスユニットを使う方法

##4.1 設定ファイル編集
タイマユニットを作成します。

タイマユニット
[root@server ~]# vi /usr/lib/systemd/system/test.timer
[root@server ~]# cat /usr/lib/systemd/system/test.timer
[Unit]
Description=Test Timer

[Timer]
OnActiveSec=5s
OnUnitActiveSec=3s
AccuracySec=100ms
Unit=test.service

[Install]
WantedBy=multi-user.target

サービスユニットを作成します。

サービスユニット
[root@server ~]# vi /usr/lib/systemd/system/test.service
[root@server ~]# cat /usr/lib/systemd/system/test.service
[Unit]
Description=Test Service

[Service]
Type=simple
ExecStart=/usr/local/bin/test.sh

[Install]
WantedBy=multi-user.target

スクリプトを作成します。

スクリプトの内容
[root@server ~]# vi /usr/local/bin/test.sh
[root@server ~]# cat /usr/local/bin/test.sh
#!/usr/bin/bash
logger -p crit TEST

作成したスクリプトに実行権を付与します。

実行権付与
[root@server ~]# chmod 744 /usr/local/bin/test.sh

編集した設定ファイルをシステムに読み込ませます。

設定ファイルの読み込み
[root@server ~]# systemctl daemon-reload

##4.2 実行結果

タイマを起動します。

タイマの起動
[root@server ~]# systemctl start test.timer

実行結果を確認すると、3秒間隔でloggerコマンドが実行され、
ログにTESTが出力されていることがわかります。

実行結果
[root@server ~]# journalctl -f
 3月 07 22:15:07 server systemd[1]: Started Test Service.
 3月 07 22:15:07 server root[5357]: TEST
 3月 07 22:15:10 server systemd[1]: Started Test Service.
 3月 07 22:15:10 server root[5360]: TEST
 3月 07 22:15:13 server systemd[1]: Started Test Service.
 3月 07 22:15:13 server root[5363]: TEST
 3月 07 22:15:16 server systemd[1]: Started Test Service.
 3月 07 22:15:16 server root[5366]: TEST

#Z 参考情報
systemd: timerユニットで起動日時制御
systemd .timerについて
systemd service timer example
Next Generation Cron With systemd: Creating A Timer
第539回 LXDのコンテナからSR-IOV対応デバイスを利用する
https://stackoverflow.com/questions/62578603/only-use-systemd-timer-oncalendar-events

Using systemd features to secure services

0
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?