Movatterモバイル変換


[0]ホーム

URL:


/etc/crontabと/etc/cron.d設定ファイルの書き方

2015.02.27
記事内に広告が含まれています。

/etc/crontabと/etc/cron.d/の書き方

/etc/crontabと/etc/cron.dの書き方メモです。

書式としては環境変数を設定し、実行するコマンド、シェルのスケジュールを記述という形になります。
参考としてCentOS 6.6の/etc/crontabの初期状態を見てみます。

「/etc/crontab」初期状態

SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# 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

環境変数設定部分と、コマンドのスケジュールの部分とに分かれていることが分かります。

設定ファイル内容

環境変数設定

変数の設定について説明します。
cronにはユーザの環境変数が引き継がれないため、ここで設定する必要があります。

SHELL

cronで使用されるシェルを設定します。

PATH

cronに教えるパスの設定します。
ここで設定されていないパス上にあるコマンド等を実行させる場合は、フルパスでコマンド等を設定する必要があります。

MAILTO

cronの実行結果を送るユーザまたはメールアドレスを指定します。
メールを送信したくない場合は「MAILTO=""」と設定します。

HOME

cronが実行されるカレントディレクトリとなります。

その他の環境変数

その他にも環境変数を設定したい場合は任意で設定することが可能です。
(変数名も任意で設定できます)

下記の例では、環境変数「COMMAND」に「logger cornd-test」を設定して、それをスケジュールで読み込んで実行しています。長いコマンドなどは、このように環境変数に設定することですっきりスケジュールを設定することができたりします。また、コマンドを編集する際にも変更もれがなくなったりと良いことがたくさんあります。

■コマンドを環境変数に設定した例

#!/bin/shSHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/COMMAND=logger cron.d-test*/3 * * * * root $COMMAND*/15 * * * * root $COMMAND18 * * * * root $COMMAND

コマンドスケジュール設定

書式としては下記のとおりとなります。

分 時 日 月 曜日 実行ユーザ 実行コマンド

毎時15分に、「logger」コマンドで「/var/log/messages」にをログを書き出す設定の場合は下記のとおりとなります。

15 * * * * root logger crontab-test

スケジュールの詳しい設定方法はここのページにまとめてあるので、参考にしてみてください。

/etc/cron.dディレクトリ内のファイル書き方

「/etc/crontab」と同じ書式でかけば良いです。

注意をする点としては・・・

  1. パーミッションは644
  2. 所有者はrootで!

「/etc/cron.d/」ディレクトリ内の「0hourly」ファイルを確認してみると、「/etc/crontab」と同じ書式で書かれていることが分かります。

「/etc/cron.d/0hourly」ファイル
SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/01 * * * * root run-parts /etc/cron.hourly

「/etc/crontab」同様に環境変数を設定し、その後に実行コマンドの設定を行っています。
ちなみ、設定内容は毎時01分にrootユーザが「/etc/cron.hourly」ディレクトリ内のプログラムを実行するという設定です。

「run-parts」がディレクトリ内のプログラムを実行するというコマンドになります。

cronが動かない場合

cronが動かない場合の切り分けとして下記の方法を試してみてください。

  • ログを確認
  • メールの確認
  • ファイルのパーミッション・所有者の確認
  • パスの確認
  • 改行コードの確認?
  • crondが動作しているか確認

ログを確認

/var/log/cronにログが出力されているので、確認してみましょう。何か解決へのヒントが記録されているかもしれません。

エラーメッセージ例

エラー各種です。

ファイルのパーミッションが違う場合

rootユーザ以外に実行権限や書き込み権限があったりすると実行されません。

■rootユーザ以外に実行権限がある場合

# ls -la /etc/cron.d/crontest-rw-r-xr-x    1 root root   117  2月 24 00:18 2015 crontest

ログに「BAD FILE MODE」と表示されていました。

Feb 24 13:00:01 centos6 crond[7999]: (root) BAD FILE MODE (/etc/cron.d/crontest)

■rootユーザ以外に書き込み権限がある場合

# ls -la /etc/cron.d/crontest-rw-rw-rw- 1 root root 117  2月 24 00:18 2015 /etc/cron.d/crontest

こちらの場合も、ログに「BAD FILE MODE」と表示されていました。

Feb 24 13:05:01 centos6 crond[7999]: (root) BAD FILE MODE (/etc/cron.d/crontest)
ファイルの所有者がroot以外の場合

ファイルの所有者がrootユーザ以外の場合もエラーとなります。

# ls -la crontest-rw-r--r-- 1 tamohiko tamohiko 116  2月 24 13:22 2015 crontest

ファイルの所有者がroot以外ですので、「WRONG FILE OWNER」とエラーが表示されています。

Feb 24 13:26:01 centos6 crond[7999]: (root) WRONG FILE OWNER (/etc/cron.d/crontest)
スケジュール設定に間違いがある場合

スケジュールの時間設定に間違いがあった場合も、エラーログがでます。
下記のログから「分」の部分に設定の間違いがあることが分かります。

Feb 24 12:58:01 centos6 crond[7999]: (CRON) bad minute (/etc/crontab)

メールの確認

環境変数で設定してあるメールにcronの結果が飛ぶのでその中身に、エラーの原因が記載されていることがあります。

エラーメール内容
Subject: Cron /root/cron-test.shContent-Type: text/plain; charset=UTF-8Auto-Submitted: auto-generatedX-Cron-Env:X-Cron-Env:X-Cron-Env:X-Cron-Env:X-Cron-Env:X-Cron-Env:X-Cron-Env:Date: Tue, 24 Feb 2015 05:00:01 +0900 (JST)Status: R/bin/bash: /root/cron-test.sh: No such file or directory

今回はファイルが無いといっているので、シェルスクリプトのファイル名違うということが分かります。

パーミッション・所有者の確認

/etc/crontabや/etc/cron.d/内の設定ファイルを確認してみてください。

  • パーミッションは644
  • 所有者はrootで!

パスの確認

cronに設定してるスクリプトなどのパスが通っているか確認してください。環境設定部分のPATH部分で設定していない場合は、フルパスで記述する必要があります。

改行コードの確認

Windows環境で作ったファイルをlinux環境に持ってくると、改行コードの違いから動作しないことがあります。改行コードがWindows標準の「CR+LF」だと動作しないので、「LF」に変更してください。

windowsでファイルを作成する場合は、サクラエディタとかなら改行コードの指定ができるはずです。他のエディタでも改行コードが指定できればそれでも良いです。

crondが実行されているか確認

設定ファイルを確認したけど問題ないよ・・・
という場合は「cron」自体が動作しているか確認してみてください。

CentOS6までは「service」コマンドを使用することで、動作しているか確認できます。

crondが動作している場合

実行中と表示されて、動作していることが分かります。

# service crond statuscrond (pid 1746) を実行中...

crondが動作していない場合

停止していますと表示され、停止していることが分かります。

# service crond statuscrond は停止しています

停止している場合はサービスを起動してください。

crondの起動
# service crond start

自動起動設定の確認

crondが自動起動されているかも念のために確認しておきましょう。

# chkconfig --list crondcrond 0:off 1:off 2:on 3:on 4:on 5:on 6:off

自動起動設定がされていない場合は、自動起動設定を行いましょう。

# chkconfig crond on

CentOS7からは・・・

CentOS7からはsystemctlを使用します。
(serviceコマンドでも確認できますが、CentOS7からはサービスの管理は「systemd」に変更されています。「systemd」について詳しくはこちらにまとめてあります。)

「crond」が動作している場合

「Active: active (running)」と表示されて「crond」が動作していることが分かります。

# systemctl status crondcrond.service - Command SchedulerLoaded: loaded (/usr/lib/systemd/system/crond.service; enabled)Active: active (running) since 木 2015-02-26 16:52:13 JST; 2min 34s agoMain PID: 822 (crond)CGroup: /system.slice/crond.servicemq822 /usr/sbin/crond -n2月 26 16:52:13 localhost.localdomain systemd[1]: Started Command Scheduler.2月 26 16:52:13 localhost.localdomain crond[822]: (CRON) INFO (RANDOM_DELAY...2月 26 16:52:13 localhost.localdomain crond[822]: (CRON) INFO (running with...Hint: Some lines were ellipsized, use -l to show in full.

「crond」が動作していない場合

起動していない場合はActive: inactive (dead)と表示されます。

# systemctl status crondcrond.service - Command SchedulerLoaded: loaded (/usr/lib/systemd/system/crond.service; enabled)Active: inactive (dead) since 木 2015-02-26 17:00:00 JST; 2s agoProcess: 822 ExecStart=/usr/sbin/crond -n $CRONDARGS (code=exited, status=0/SUCCESS)Main PID: 822 (code=exited, status=0/SUCCESS)2月 26 16:52:13 localhost.localdomain systemd[1]: Started Command Scheduler.2月 26 16:52:13 localhost.localdomain crond[822]: (CRON) INFO (RANDOM_DELAY...2月 26 16:52:13 localhost.localdomain crond[822]: (CRON) INFO (running with...2月 26 17:00:00 localhost.localdomain systemd[1]: Stopping Command Schedule...2月 26 17:00:00 localhost.localdomain systemd[1]: Stopped Command Scheduler.Hint: Some lines were ellipsized, use -l to show in full.

起動していない場合は「crond」を起動させてください。

# systemctl start crond

自動起動設定の確認

自動起動設定の確認は下記のとおりです。

自動起動設定がされている場合は「enabled」と表示されます。

# systemctl is-enabled crondenabled

自動起動設定がされていない場合は「disabled」と表示されます。

# systemctl is-enabled cronddisabled

自動起動設定

自動起動設定がされていない場合は、下記のコマンドで自動起動設定が出来ます。

# systemctl enable crond

関連記事

Tips

【MD5 SHA1 SHA256 CRC】ハッシュ値(チェックサム)の確認方法

「MD5」「SHA1」「SHA256」「CRC」といった形式のハッシュ値を計算する方法です。ハッシュ値を比較してファイルの同一性を確認しよう何かしらのデータをダウンロードしたりコピーする際に、そのデータが配布元のデータと同じであること(デー...
Tips

【CentOS7】Lets EncryptでSSL証明書を取得

「centOS 7」環境で「Lets Encrypt」のSSL証明書を取得する方法です。事前準備Lets EncryptでSSL証明書を取得する場合、事前に下記の設定を行っておく必要が有ります。 証明書を取得対象のホスト名がインターネット上...
Tips

ddを使ったテストファイルの作り方

検証環境OS: CentOS5テスト用データの作成方法「FTPでデータのダウンロードやアップロードの試験を行いたい」「メール受信サイズ制限の確認をしたい」「quotaの動作確認をしたい!!」などといった場合に、適当な大きさのテストデータがす...
Tips

ネットワークが繋がらない時に確認すること

ざっくりとネットワーク障害を切り分けする方法クライアントPCやデバイスがインターネットやサーバに繋がらない場合に、私が行っている障害ポイントの切り分け方法をメモしておきます。ざっくりとした内容ですが、何か参考になればと思います。確認項目とり...
Tips

CentOS バージョン確認いろいろ

CentOSのバージョンを確認する方法です。「/etc/redhat-release」ファイルでの確認方法と、「lsb_release」コマンドを使用した方法をまとめています。/etc/redhat-releaseでの確認「/etc/red...
Tips

zip形式で圧縮したファイルにパスワードを設定する方法

CentOSでパスワード付きの圧縮ファイル(zip形式)を作成する方法です。圧縮「zip」コマンドを使用することで、zip形式の圧縮ファイルにパスワードを設定することが出来ます。(gzipではパスワードを設定できませんので注意してください)...
スポンサーリンク

コメント

コメントをどうぞコメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

カテゴリー

最近の投稿

Jikage rising
2025.09.19
素晴らしいガイドですね!最小限インストールの手順がわかりやすくまとめられていて、初心者でも安心して進められます。おかげでスムーズにCentOS8をインストールできました。ありがとうございました!
CentOS8インストール(最小限インストール)
SpookyMilkLife
2025.08.18
非常に役立つ情報をありがとうございます!nmtuiの使い方が分かりやすく説明されていて、設定がスムーズにできました。今後もこのような記事を楽しみにしています!
NetworkManager 使用方法(nmtui編)
te
2024.05.22
こんにちはこちら記事、たいへんわかりやすかったです。ありがとうございます。
ssh-agentを使って公開鍵認証方式のsshパスワード入力を省略する方法
けんじ
2023.07.24
ファイルを読み込む時は、$(cat ./list.txt)より、$(< ./list.txt)の方が効率的です。
【シェルスクリプト】IFSで区切り文字(デリミタ)を変更する方法
たろう
2023.01.16
「pingで送信視するパケットサイズを指定した場合、指定したサイズ以外にもIPヘッダ(20バイト)とイーサネットフレーム(8バイト)が追加されて送信されます。」と記載がありますが、WireSharkで...
MTUの最適値を調べる方法
タイトルとURLをコピーしました

[8]ページ先頭

©2009-2025 Movatter.jp