crontabの罠 [ソフトウェア/PC関係]
Linuxで,タスクをスケジュール実行するのに使用するcron。cronの設定をするのに,crontabというコマンドが使える。しかし,こいつが意外と曲者
crontabで現在の設定を見るには,
crontab -l
とlオプションを使う。編集するには
crontab -e
とeオプションを使う。ところが,rオプションというのがあって,
crontab -r
とやると,設定が綺麗さっぱり消えてしまう。「r」は「e」の隣にあるから,打ち間違えると大変だ。そんな訳で,気を付けなければいけないというのは知っていた。実際,間違えてrオプションで実行してしまったことはない。ところが,罠はそれだけではなかった。
私がやってしまったのは
crontab
つまり,オプションを付け忘れて実行してしまったのだ。後から思えば,ここまでならまだ良かった。しかし,問題はその後だった。何も表示されずに止まってしまったところで,オプションを付け忘れたのに気が付いたのだが,ここで何となくctrl-Dを押してしまったのである。そして,改めて,"crontab -l"を実行してみてびっくり。設定してあったはずのタスクがなくなってしまった。
何故こんなことになったのだろうか。crontabのmanual pageには,そもそも引数なしの形式が載っていないのだ。しかし怪しいのは,
crontab [ -u user ] file
という形式。crontabにファイル名を指定して実行すると,そのファイルの内容で設定を置き換えてしまうようになっている。そしてどうも,ファイル名を指定しないと,勝手に標準入力から読み込んでしまうようだ。manual pageには,擬似ファイル名として「-」を指定した時に標準入力から読み込む,と書いてあるのだが,「-」がなくても同じ動作をするっぽい。ここでctrl-Cを押せば,実行が中止されたものを,ctrl-D,つまりEOFを押してしまったために,標準入力から空のファイルを指定したことになってしまったのである。
なんで,「-」のない場合をエラーにしてくれなかったのだろう。咄嗟にctrl-Dを打ってしまうのは手癖のようなもので,単純なキーの打ち間違いとはちょっと違う。矯正しようと思っても,なかなか簡単にはいかないだろう。こういう罠にハマる人は他にはいないのだろうか。困ったものである。せめて確認メッセージを出して欲しかった。
因みに,Debianの古いバージョン(新しいのが手元にないので)では,引数なしの場合はUsageが表示された。
コメント 0