レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

CRONを使う

2012年11月18日 2014年1月16日
cron

今回は、CRONを使ってみます。

CRONを使う場合には、直接、crontab ファイルを編集する方法と、crontabコマンドを利用して編集する方法があります。

一般的に
サーバーを一人で管理運営、利用している場合は、/etc/crontab を編集して利用するのが、最も簡単でしょう。
サーバーを複数人で管理運営、利用している場合は、crontab コマンドを使用して編集して運営するのが、煩雑にならないで良いでしょう。
( crontab コマンドを利用した場合は、ユーザごとにcrontabファイルが作成され、他ユーザのcron設定と共存できる仕組みがこのコマンドで提供されます。)

以下は、crontabに関する Wikipedia の抜粋です。

crontab(クロンタブ、あるいはクローンタブ、クーロンタブとも)コマンドは、
Unix系OSにおいて、コマンドの定時実行のスケジュール管理を行うために用いられるコマンドである。 標準入力からコマンド列を読み取り、crontabと呼ばれるファイルにそれを記録する。 この記録を元に定時になると、その命令内容を読み取り、実行が行われる。

一般にcrontabコマンドで編集されたスケジュール内容は、crondデーモンにより実行される。 crondはバックグラウンドで稼動し、毎分ごとに実行すべきスケジュールがないか確認し、もし実行すべきジョブがあれば、それを実行する。 このジョブは「cron job」とも呼ばれる。

出典 : Wikipedia (http://ja.wikipedia.org/wiki/Crontab)

crontab の使い方

/etc/crontab を直接編集する場合は、そのままviなどでテキストを編集するだけなので、特別な解説も必要ないと思います。crontabコマンドを使う場合との違いは、フォーマットの違いにあります。 crontab コマンドでは、cron設定の編集、削除などを行うことができます。

使い方: crontab [-u ユーザ] file  
                 crontabのファイルを指定する
        crontab [ -u ユーザ ] [ -i ] { -e | -l | -r }
        -e     (今ログイン中 or 指定のユーザで)編集する 
        -l     (今ログイン中 or 指定のユーザで登録している)crontabリストを出力する
        -r     (今ログイン中 or 指定のユーザで登録している)crontabリストを削除する
        -i     (今ログイン中 or 指定のユーザで登録している)crontabリストを削除する際に確認メッセージを表示する

crontab コマンドには、大きく2つの役割があります。

  • crontabファイルの指定
  • cron設定の編集、削除

の2つです。


crontab で編集する

先に記述したように
直接 /etc/crontab を直接編集するにしても、crontabコマンドを使用する場合にしても
crontab の設定は、テキストファイル ( crontabファイル ) の編集を行うことで設定します。

そのテキストファイル ( crontabファイル ) のフォーマットは、ほぼ同じ(ユーザ情報があるかないかの違いだけです)です。
以下にcrontabコマンドでの設定例を元に簡単に解説してみます。

$ crontab -e

とすると、以下のようにGNU nano (テキストエディタ)が起動されます。

crontab編集画面

このGNU nano (テキストエディタ)で起動する月日時分、実行するコマンドを指定することでcronの設定を行います。

crontabコマンドでは、下記のようなフォーマットになります。
# (設定フォーマット)
# m  h  dom mon dow  command
# 分 時 日  月  曜   コマンド
* * * 1 * /bin/sh /home/hoge/testmonth.sh

# (行頭の # マークはコメント行を示す)
# 
# * * * * * 実行されるコマンド
# | | | | |
# | | | | +---- 曜日 (0 - 6) (日曜日=0 or 7)
# | | | +------ 月 (1 - 12) 
# | | +-------- 日 (1 - 31)
# | +---------- 時 (0 - 23)
# +------------ 分 (0 - 59)
#   (数字の指定方法)
#    * : 指定なし(毎(分時日月曜)を意味する)
#    数値 : 各指定箇(順)所にて 分 時 日 月 曜 を表します。
#      例)
#      44 1     * * * : 毎日1時44分に起動
#      44 1-3   * * * : 毎日1時から3時の間に各時44分に起動(つまり、1時、2時、3時の44分に起動)
#      44 1,2,3 * * * : 毎日1時、2時、3時の44分に起動(上の指定と同じ) カンマで区切って複数指定可(ただし、間に空白を入れてないならない)。
#      44 */3   * * * : 毎日3時時間おきに起動(つまり、1日に3時間毎の44分に8回起動)

/etc/crontab を直接編集する場合は、以下のようなフォーマットになります。
# (設定フォーマット)
# m  h  dom mon dow  user       command
# 分 時 日  月  曜   実行ユーザ コマンド
* * * 1 * hoge /bin/sh /home/hoge/testmonth.sh
曜日とコマンドの間に実行ユーザ名を指定する点のみが異なります。この点以外は、全く同じです。

編集を終えたら、Ctrl+O で保存、Ctrl+X で終了です。
特に誤りがあった場合は、終了時にエラーが表示されます。

"/tmp/crontab.yZ0Cfh/crontab":1: bad day-of-week
errors in crontab file, can't install.
Do you want to retry the same edit? (y/n)

y : ファイルを再編集します。
n : 編集内容を破棄して終了します。
のいずれかを選択することになります。


crontab で内容を確認する

直接 /etc/crontab を直接編集する場合は、rm コマンドでファイルを丸ごと削除できます。同じように crontabコマンドを使用しても編集内容を丸ごと削除できます。

$ crontab -r

何の確認もなく削除されます。通常は、-i オプションを追加して削除します。

$ crontab -i -r
crontab: really delete hoge's crontab? (y/n) 

このように確認メッセージが表示されます。そこで y を選択することで削除が実行されます。

このように -r オプションは誤って使った場合に、丸ごと削除されてしまうので、 通常は、各ユーザのホームディレクトリの .bashrc あるいは .bash_profile ファイルに alias を定義します。
$ vi ~/.bashrc
..
alias crontab='crontab -i'
で保存した後に、編集した.bashrcを読み込み、-r オプションのみで実行してみてください。
$ source ~/.bashrc
$ crontab -r
crontab: really delete hoge's crontab? (y/n) 
と確認メッセージが表示されるようになると思います。

crontab で内容を確認する

直接 /etc/crontab を直接編集する場合は、cat コマンドで内容を確認できます。同じように crontabコマンドを使用しても内容を確認するこができます。

$ crontab -l

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
* * * 1 * /bin/sh /home/hoge/testmonth.sh

crontab で作成するファイルの保存先

crontabで編集されたファイルは、以下のディレクトリにユーザ名をファイル名として自動的に保存されます。

CentOS ScientificLinux

$ ls -l /var/spool/cron/
hoge

Debian Ubuntu

$ ls -l /var/spool/cron/crontabs/
hoge

ファイル名および保存先ディレクトリの変更をしたいなら、下記のように crontab コマンド投入で変更できます。

# -- crontab ファイル名 でファイルを変更可能です。-- #
$ crontab ~/local_crontab

これ以降、
crontab -e で編集されるファイルは、~/local_crontab になります。
ただし、crontab -r で削除した場合、初期状態に戻ります。


crontab のテストでよくある失敗

  • 早くテストしたいので1分後に起動時間を設定してしまう

    少なくとも2分以上の間隔をおいて指定する必要があります。それは、crondがファイルの更新に気づくのは、最長で1分後です。その後、実行しますから、2分の間隔は必要ということになります。
    ただし、1分後として、crondを再起動して無理やり更新させてしまうという手段はあります。


  • コマンド指定で % をそのまま使ってしまう
    $ crontab -e
    ...
    1 * * * * echo `date "+%Y%m%d"`

    これだと、以下のようなエラーが出力されます。

    /bin/sh: Syntax error: EOF in backquote substitution

    これを、以下のように % をエスケープして 編集しなおすとエラーが出力されなくなります。

    $ crontab -e
    ...
    1 * * * * echo `date "+\%Y\%m\%d"`

    あるいは、

    $ crontab -e
    ...
    1 * * * * echo $(date +\%Y\%m\%d)

  • テストの度にメール送信してしまう

    cron実行で、エラーなど出力情報がある場合は、メールにてエラー通知されます。 そこで、メールへの送信をテストしている間くらいは停止したいところです。その際、crontabにて設定情報の先頭に以下のようにメール送信先をブランク設定すれば、メール送信されなくなります。

    $ crontab -e
    ...
    MAILTO=""

    もちろんメールの送信先を変更する際も利用できます。


  • 日と週を同時に設定して誤動作してしまう

    実行する日と週を同時に設定する場合は、OR判断されるので注意が必要です。

    $ crontab -e
    ...
    1 2 1-7 * 0 echo `date "+\%Y\%m\%d"`

    上記では、毎月第一日曜日にコマンドが実行されるわけではないことに注意する必要があります。
    この設定では、毎月、1日から7日と毎週日曜日にコマンドが実行されてしまいます。

    つまり、日と曜日の設定を同時に行う場合は、AND判断されるわけでなくOR判断されることに注意する必要があります。


  • * を省略と誤った使い方をして誤動作してしまう

    実行する分時日月曜を * を使った場合、それは、 ということであることに注意する必要があります。

    $ crontab -e
    ...
    * 1 * * * echo `date "+\%Y\%m\%d"`

    上記では、毎日1時にコマンドが実行されるわけではないことに注意する必要があります。
    この設定では、毎日1時から2時までの間、1分分)にコマンドが実行されてしまいます。

    ここで、毎日1時に1回だけ実行したいのであれば、ちゃんと何分まで指定する必要があります。

    $ crontab -e
    ...
    0 1 * * * echo `date "+\%Y\%m\%d"`

    このように設定すれば、毎日1時ちょうどにコマンドが実行されます。
    これは、日を指定して時、分を * にしてしまう場合も同じように間違いやすいので注意が必要です。



cronは、windowsでのタスク(スケジューラ)のようなものです。
使いこなすと自動化ができて便利です。使い方も非常にシンプルで設定する内容も簡素です。
簡素であるが故に、間違いやすいところも多いので、注意して使いましょうね。
個人的にもよく間違うので備忘録です。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

評判のさくらのVPSを使うときに最初にやっておきたいこと(Scientific Linux編)

先のScientific Linux 6.x をインストールするからの続きです。 CentOS版の ・yum を使って ...

評判のお名前.com VPS(KVM)を使うときに最初にやっておきたいこと(CentOS編)

お名前.com VPS (KVM)の具体的な評価(世間の評判も含めて)や感想は、 → お名前.com VPS (KVM) ...

procmailでメールボックスのパーミッションが660になってしまう対処について調べてみた

Dovecotでfchmodのエラーが出た時の対処 でエラーの本当の原因は、メールボックスのパーミッションにグループの権限が付与される(660) ...

FreeBSDで日本語環境(UTF-8対応)を整える

FreeBSDでSSHを使えるようにする でSSHでログインまでできるようになりました。 さて、現状では、FreeBSDは、すべてが英語で ...

評判のCloudCore VPSを使うときに最初にやっておきたいこと(CentOS編)

以前の記事「評判のKDDI CPIのVPS ( CloudCore ( クラウドコア ) VPS ) を使ってみた」で KDDI C ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.2951 [s]