#
ドキュメント

Document

自分のための備忘録です。

Cron

  • Ubuntu( Debian 系)の Cron について記載します
  • Cronの実行者にログへの書き込み権限があるかを確認します

配置場所

  • /var/spool/cron/crontabs/{{user}}
  • /etc/crontab/
  • /etc/cron.d/*

ref. https://penpen-dev.com/blog/cron/

crontab で作成したファイルは /var/spool/cron/crontabs/{{user}} に作成されます。

フォーマット

* * * * * コマンド
分 時 日 月 曜日

例( crontab の例)

crontab で作成する例です。
/var/spool/cron/crontabs/{{user}} に保存されます。

現在は /etc/cron.d/ に直接ファイルを作成するほうが推奨されています。

# 1分ごとに /date/log.txt へ日時を出力
*/1 * * * * echo `date` >log.txt

リダイレクションとパスの間には空白は入れません。

/etc/cron.d/sample

現在は /etc/cron.d/ にファイルを作成するほうが推奨される場合が多いようです。
$ sudo cp /etc/crontab /etc/cron.d/sample のように /etc/crontab をひな形として利用します。

AWS EC2 Ubuntu22.04 は /etc/cron.d の権限は 755 です。

$ ll /etc | grep cron.d
drwxr-xr-x   2 root root       4096 Sep  9 15:59 cron.d/

/etc/cron.d/sampl の所有者は ubuntu で実行可能です(その他に r x が付与されているため)。

l /etc/cron.d
total 24
.....
-rw-r--r--   1 ubuntu ubuntu  872 Sep  9 15:59 sample

標準出力および標準エラー出力ともに /home/ubuntu/sample.log に出力するサンプルを記載します。

 /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
# You can also override PATH, but by default, newer versions inherit it from the environment
#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# 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
*/1 * * * * ubuntu echo "$(date)" >>/home/ubuntu/log.txt 2>&1

crontab

Cron の設定は、直接ファイルを編集せずに、crontab コマンドを使います(※1)。

現在は /etc/cron.d/ にファイルを作成するほうが推奨されます。 そのときは$ sudo cp /etc/crontab /etc/cron.d/sampleのように/etc/crontabをひな形として利用します。

# 編集
$ crontab -e
# 削除
$ crontab -r
# 一覧
$ crontab -l

ユーザーのcronファイル

ubuntuユーザーのcrontabのファイルは、/var/spool/cron/crontabs/ubuntu(Ubuntu 18.04)へ保存されます。

$ sudo ls -al /var/spool/cron/crontabs/ubuntu
-rw------- 1 ubuntu crontab 1089 Oct 13 07:23 /var/spool/cron/crontabs/ubuntu

MAILTO

MAILTOが指定されているときは、標準出力(エラー含む)の内容を指定アドレスへ送信します。
(出力内容がファイルなどへリダイレクションされているときはメールは送信されません。)
MAILTOが未設定のときは、Cronの作成ユーザーへメールが送信されます。

MAILTO="info@info-town.jp"
LANG=ja_JP.UTF-8
LC_ALL=ja_JP.UTF-8
CONTENT_TYPE=text/plain; charset=UTF-8

*/1 * * * * echo `date`

標準エラー出力を標準出力へリダイレクト

# 標準出力・エラー出力とも/dev/nullに出力
*/1 * * * * echo `date` >/dev/null 2>&1
# 標準出力はlog.txt、標準エラー出力はerror.logへ出力します。
# 下記はechoがエラーなのでerror.logへ出力されます。
*/1 * * * * eecho `date` >>log.txt 2>>error.log

# 標準エラー出力を標準出力へリダイレクトします。
# 下記はエラー出力はlog.txtへ出力されます。
*/1 * * * * echo `date` >>log.txt 2>&1
  1. 2>&12>>&1と書くと実行されません
  2. リダイレクションとパスの間には空白は入れません

一時的に試したいとき

/etc/cron.dにファイルを作成(ファイル名は任意)します。

cron.dへ配置する場合は、実行ユーザーを明示する必要があります。

https://vividcode.hatenablog.com/entry/man-cron-and-crontab

rsyslogの使用

  • Cronの設定で、メールアドレスおよびリダイレクションを設定していないとき場合には、ログは/var/log/cron.logに出力
  • ログ