cronについて

とっても便利なソフトです。
指定された時間に指定された仕事を淡々とこなします。
CUIベースで使えるLinuxではWindowsのタスクマネージャーより使えるかと。

まぁ、人によってはいろいろと問題はあるようですが・・・
「問題」
一番あるのが設定ミス。
まぁ、CUIだから・・・って、訳でもないんですけどね。
その次にあるのが、秒での起動指定ができないこと。
まぁ、起動間隔が1分ごとっていうのが原因ですが・・・
Linuxにはsleepコマンドがあるから、これを使えばいいと思うんですが・・・どうでしょうね?

書いたこと一覧
	・基本的な使い方応用的な使い方



基本的な使い方

タスクマネージャーのようなもので、1分ごとに設定ファイルを確認して、
設定ファイルの所有者の権限においてコマンドを実行するソフト。

設定そのものは非常に単純。
まぁ、単純ゆえに難しいこともあるけど・・・(え?

基本的な記述方法は以下の通り

	分	時	日	月	曜日	ユーザー	コマンド
	[0-59]	[0-23]	[0-31]	[0-12]	[0-7]	任意	任意

	注意事項
	  ワイルドカードに "*" が使用できる。
	  曜日の0と7はどちらも日曜日と解釈される
	  月や曜日にはその月・曜日の英語名最初の3文字にて代用可能(って、使わないなw)
	  設定ファイル(crontab)の所有者がコマンド実行者の場合、
	  ユーザーは省略可能。っていうか、普通は省略するw
	  "#"を行頭につけることで、その行は無視される(コメント化)
なので、1回だけ実行する場合には・・・
	毎日4時22分に[hoehoe]を実行
		22 4 * * * [hoehoe]
	毎週月曜日に[pompom]を実行
		51 6 * * 1 [pompom]
		51 6 * * mon [pompom]
			注)分や時で*を使うと1分ごと/1時間ごとに[pompom]を実行してしまう。
となる。

また、cronではcronで実行されたコマンドで標準出力があった場合は、
crontabの所有者(まぁ、基本的には設定したユーザー)にメールを送信する。
端的なエラーがメールで送られてくることが多い。
設定ミスをして標準出力が多いスクリプトを書くと馬鹿でかいメールが送られてくることになるw
「英語名最初の3文字」
英語名指定ができるとのことですが、遣ったことはないです。
英語わからないw
母国語が英語のところはプログラムとかの理解も簡単で良いですよね。
結局はベースが英語だから。
プログラム言語として勉強しなくても、普通に読めるでしょうし・・・

応用的な使い方

ワイルドカード "*" で間違いやすい使い方について適当に・・・

毎日23時に実行する
	* 23 * * * [hoge]
この記述では毎日23時の1分ごと(60回)に[hoge]を実行してしまい、
処理内容によってはとんでもないことになってしまう。

"*"は指定された項目の全ての値のこと(今回は0-59)


柔軟な時間指定について
cronではいろいろなニーズに対応できるように柔軟な時間指定の方法がある。

","を用いると複数の値を列記することができる。
例えば、
毎時2分と32分に実行する
	2,32 * * * * [hoge]
となる。
ということは、10分ごとに実行したい場合は
	0,10,20,30,40,50 * * * * [hoge]
となる。


しかし、書くのが面倒臭い(を
まだ10分ごとなら書く気にもなるが、3分ごととなると・・・。。(o_ _)o モウダメポ
そんなときは"/"を使えばいい。
これはb/aと表記することで「bの範囲内でaごとに」という意味になる。
上記の例を"/"を用いて表記すると
10分ごとに実行する
	*/10 * * * * [hoge]
となり、かなりすっきりする。


人によっては「6時〜18時の間だけ実行したい」というのもあるだろう。
そんなときは"-"を用いる。
"-"は範囲を指定するもので、x-yと表記することで「xからyまで」という意味になる。
上記の例を表記すると
6時〜18時の間に実行する
	0 6-18 * * * [hoge]
となり、6時〜18時の0分に[hoge]が実行される。


"-"と"/"、または","は組み合わせて使うことができる。
最初の例で言うと
毎時2分と32分に実行する
	2-59/30 * * * * [hoge]
となる。
0時〜4時までは毎時、9時〜午後9時までは2時間ごとに実行したい場合は、
	52 0-4,9-21/2 * * * [hoge]
と表記される。
これは、
	52 0,1,2,3,4,9,11,13,15,17,19,21 * * * [hoge]
と同義である。


日と曜日はどちらも日にちに関する指定で、どちらかが適合した場合に実行される。
例えば、
	52 4 */10 * 6 [hoge]
では、毎月の1,11,21,31日、または毎週土曜日の4時52分に実行される。
「柔軟な時間指定」
ほとんど全ての時間に対応できるほど事細かに設定できます。
注意する点は
1.秒単位の指定はできない
2.設定を保存した次の0秒で新しく追加したコマンドは実行されない
という点でしょう。

1.はcron自身が1分ごとに起動するのが原因ですのでどうしようもないです。
コマンドのところを sleep 30; [comand] とすればある程度は制御可能です。
まぁ、厳密には数秒ずれますが・・・
そもそも、そこまで厳密に起動タイミングを指定する必要があるのか?と思うけどね・・・

2.は起動したときに設定ファイル(crontab)を読み込むためです。
ぎりぎりに保存しないように注意するしかないですね(をひ


実行ユーザーは特に変更する必要はない(基本的に省略だ)と思うけど、変更する場合は
su - で変更できるユーザーに制限されると思われます。
まぁ、使ったことないけど(を


応用という点では他にも、
「第 6」フィールド (行の残りの部分) には実行されるコマンドを指定する。
その行のコマンド部 (改行文字または % 文字まで) が
/bin/sh (またはその crontab ファイルの SHELL 環境変数で指定されたシェル) によって実行される。
コマンド中にパーセント記号 (%) がバックスラッシュ (\) によってエスケープされずに置かれていると、
改行文字に置き換えられ、最初に現れた % 以降の全てのデータは標準入力としてコマンドに送られる。
というものもあります。けど、使ったことないです(を


戻るなら押せ!