LoginSignup
0
0

ジョブスケジューリング

Posted at

ジョブスケジューリングとは

決められた時刻に、指定したコマンドを定期的に実行する機能で、cron(クーロン)と呼ばれている。
システムの保守では、locateコマンドのデータベース更新やログファイルの定期的なローテーションなどに用いられる。

インストール

Amazon Linux2023でデフォルトで、未インストールのため下記の対応をしていきます。

# インストール有無の確認
[ec2-user@ip-172-31-45-214 ~]$ rpm -q cronie
package cronie is not installed

# インストールする
[ec2-user@ip-172-31-45-214 ~]$ sudo yum install -y cronie
Last metadata expiration check: 12:23:41 ago on Tue Jan 30 13:49:27 2024.
Dependencies resolved.
===================================================================================================================================================================================
 Package                                     Architecture                        Version                                            Repository                                Size
===================================================================================================================================================================================
Installing:
 cronie                                      x86_64                              1.5.7-1.amzn2023.0.2                               amazonlinux                              115 k
Installing dependencies:
 cronie-anacron                              x86_64                              1.5.7-1.amzn2023.0.2                               amazonlinux                               32 k

Transaction Summary
===================================================================================================================================================================================
Install  2 Packages

Total download size: 147 k
Installed size: 341 k
Downloading Packages:
(1/2): cronie-anacron-1.5.7-1.amzn2023.0.2.x86_64.rpm                                                                                              516 kB/s |  32 kB     00:00    
(2/2): cronie-1.5.7-1.amzn2023.0.2.x86_64.rpm                                                                                                      1.3 MB/s | 115 kB     00:00    
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                                              965 kB/s | 147 kB     00:00     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                                                           1/1 
  Installing       : cronie-1.5.7-1.amzn2023.0.2.x86_64                                                                                                                        1/2 
  Running scriptlet: cronie-1.5.7-1.amzn2023.0.2.x86_64                                                                                                                        1/2 
Created symlink /etc/systemd/system/multi-user.target.wants/crond.service → /usr/lib/systemd/system/crond.service.

  Installing       : cronie-anacron-1.5.7-1.amzn2023.0.2.x86_64                                                                                                                2/2 
  Running scriptlet: cronie-anacron-1.5.7-1.amzn2023.0.2.x86_64                                                                                                                2/2 
  Verifying        : cronie-anacron-1.5.7-1.amzn2023.0.2.x86_64                                                                                                                1/2 
  Verifying        : cronie-1.5.7-1.amzn2023.0.2.x86_64                                                                                                                        2/2 

Installed:
  cronie-1.5.7-1.amzn2023.0.2.x86_64                                                   cronie-anacron-1.5.7-1.amzn2023.0.2.x86_64                                                  

Complete!

サービスの起動

# 事前確認
[ec2-user@ip-172-31-45-214 ~]$ systemctl status crond
○ crond.service - Command Scheduler
     Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; preset: enabled)
     Active: inactive (dead)

# cronデーモンの起動設定
[ec2-user@ip-172-31-45-214 ~]$ sudo systemctl start crond
[ec2-user@ip-172-31-45-214 ~]$ sudo systemctl enable crond

# 起動設定後の確認
[ec2-user@ip-172-31-45-214 ~]$ systemctl status crond
● crond.service - Command Scheduler
     Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; preset: enabled)
     Active: active (running) since Wed 2024-01-31 02:15:42 UTC; 31s ago
   Main PID: 137251 (crond)
      Tasks: 1 (limit: 1114)
     Memory: 996.0K
        CPU: 6ms
     CGroup: /system.slice/crond.service
             └─137251 /usr/sbin/crond -n

Jan 31 02:15:42 ip-172-31-45-214.ec2.internal crond[137251]: (CRON) STARTUP (1.5.7)
Jan 31 02:15:42 ip-172-31-45-214.ec2.internal systemd[1]: Started crond.service - Command Scheduler.
Jan 31 02:15:42 ip-172-31-45-214.ec2.internal crond[137251]: (CRON) INFO (Syslog will be used instead of sendmail.)
Jan 31 02:15:42 ip-172-31-45-214.ec2.internal crond[137251]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 81% if used.)
Jan 31 02:15:42 ip-172-31-45-214.ec2.internal crond[137251]: (CRON) INFO (running with inotify support)

設定ファイル

システムの設定ファイルは、/etc/crontabです。

曜日 ユーザ コマンド
0-59 0-23 1-31 1-12 0-7(0と7は日曜) ユーザ名 実行コマンド

フィールドの指定

フィールド表記 説明
* 全ての数字に一致
- 「時」に15-17を指定すると、15時、16時、17時を表す。
「曜日」に1-4を指定すると、月曜、火曜、水曜、木曜を表す。
, 「分」に0,15,30,45を指定すると、0分、15分、30分、45分を表す。
/ 「分」に10-20/2を指定すると、10分から20分の間で2分間隔を表す。
「分」に:/2を指定するとその時間内で2分間隔を表す。
[ec2-user@ip-172-31-45-214 ~]$ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

crontab オプション が記載方法になる。

オプション 説明
-e 編集
-l 表示
-r 削除

簡単なcrontabファイルの作成

# dateコマンドが2分おきに実行して、/tmp/datefileに出力するコマンド
[ec2-user@ip-172-31-45-214 ~]$ crontab -e
[ec2-user@ip-172-31-45-214 ~]$ crontab -l
*/2 * * * * /bin/date >> /tmp/datefile

[ec2-user@ip-172-31-45-214 ~]$ tail -f /tmp/datefile 
Wed Jan 31 04:10:02 UTC 2024
Wed Jan 31 04:12:01 UTC 2024
Wed Jan 31 04:14:01 UTC 2024
Wed Jan 31 04:16:01 UTC 2024
Wed Jan 31 04:18:01 UTC 2024

cronユーザの制限

crontabコマンドに対して、一般ユーザの実行制限を設定するには/etc/cron.allow/etc/cron.denyファイルを使用します。

ルール

  • 「cron.allow」がある場合、ファイルに記述されているユーザがcronを利用できる。
  • 「cron.allow」がなく「cron.deny」がある場合、「cron.deny」に記載がないユーザが利用できる。
  • 「cron.allow」と「cron.deny」の両方がない場合、すべてのユーザが利用できる。
# root権限で、cron.denyファイルを編集
[ec2-user@ip-172-31-45-214 ~]$ sudo vi /etc/cron.deny

[ec2-user@ip-172-31-45-214 ~]$ cat /etc/cron.deny
ec2-user

# 実行ができないようになっている。
[ec2-user@ip-172-31-45-214 ~]$ crontab -l
You (ec2-user) are not allowed to use this program (crontab)
See crontab(1) for more information

anacron

anacronは、コマンドを日単位の感覚で定期的に実行する。
主に、管理者がシステム保守のために設定します。

[ec2-user@ip-172-31-45-214 ~]$ sudo cat /etc/cron
cron.d/       cron.daily/   cron.deny     cron.hourly/  cron.monthly/ cron.weekly/  crontab 

atサービス

指定した時刻に1回だけ実行するには、atコマンドを使用します。
at [オプション] 時間 が記載方法になる。

システムの負荷が低くなったときに指定したコマンドを実行するには、batchコマンドを使用します
batch [オプション] が記載方法になる。

オプション 説明
-l 実行ユーザのキューに入っているジョブを表示する。
-d ジョブを削除する

時間・日付の主な指定方法

時間指定 説明
HH:MM 10:15と指定すると、10時15分を表す
midnight 深夜0時を表す
noon 正午を表す
now 現在の時刻を表す
teatime 午後4時を表す
am、pm 10amと指定すると、午前10時
MMDDYY、MM/DD/YY、MM.DD.YY 013124と指定すると、2024年1月31日を表す
today 今日を表す
tomorrow 明日を表す
atコマンドでジョブ登録
# 今から1分後に、echoコマンドを実行する。
[ec2-user@ip-172-31-45-214 ~]$ at now +1 minutes
warning: commands will be executed using /bin/sh
at> echo atCommandTEST > /home/ec2-user/fileA
at> <EOT>
job 3 at Wed Jan 31 07:01:00 2024

# atキューを確認する。
[ec2-user@ip-172-31-45-214 ~]$ sudo atq
3       Wed Jan 31 07:01:00 2024 a ec2-user

# 実行結果の確認
[ec2-user@ip-172-31-45-214 ~]$ cat fileA
atCommandTEST

※ジョブの削除を行うときは、atrmまたはat -dコマンドに引数として、ジョブ番号を指定する。

atコマンド利用ユーザの制限

root権限は、atbatchコマンドの実行は許可されているが、一般ユーザはファイルによって利用制限がかかる。
/etc/at.allowと/etc/at.denyのそれぞれ許可拒否するユーザ名を記載する。

ユーザ制限早見表

at.deny at.allow 説明
dog なし dog以外のユーザが実行可能
なし dog rootとdogのみが実行可能
dog cat rootとcatのみが実行可能
なし なし rootのみが実行可能
0
0
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
0