• ベストアンサー

crontab -e で作成したファイルはどこに?等

crontab -e で、viである時間で自動で毎日処理するのコマンドを書きました。 viの:w(上書き保存)で書いたファイルを保存しました。 そのファイル名はcrontab.1508(tmp/crontab.1508)と勝手になっていましたが、 find / -name crontab* をしても出てきませんでした。 確かに、viで:wした時にこの名前で上書き保存されたとおもうのですが・・・。 crontab -lで設定したファイルを確認すると、viで書いたものが出てきますので、ど こかに保存されていると思います。 質問ですが、(1)crontab -e で作成したファイルはどこにいってしまったのでしょうか。 (2)/etcに、/etc/cron.daily、/etc/cron.monthly、/etc/cron.weekly、/etc/cron.d /etc/cron.hourly、とありますが、これらはcrontab -eで作成したファイルと関係あるのでしょうか。 (3)別のマシンにこれらの/etcをコピーすれば同じ処理ができるのでしょうか。 (4)crontabの処理を追加していくには、crontab -e でviを起動し、追加していけばそれでよいのでしょうか。 (5)処理したいファイルを書き、crontab ファイル名 という方法もあるようですが、 この書いたファイルは/etc以下に置いても良いのでしょうか。 (一般的に、/etcはバックアップを取っておく様なので…) 教えてください。おねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Fooky
  • ベストアンサー率71% (59/82)
回答No.6

どうも遅くなりました。 新たなご質問があったとは気づかなくて。 > */15 7-21 * * * printf '\0007'  ああ、それじゃ鳴らないですね。すいません、 説明不足で。これだと、7番のキャラクタの 出力先である、printfの標準出力が、 ターミナルに接続されてません。これだと、 printfの標準出力はcronデーモンに接続 されてるんで、cronは、「printfが何か 言ってきたぞ」と思って、root宛にメールを よこしてきたでしょう。 アスキーコード7番をビープとして解釈する、 というのはターミナルの機能なんで、 printfの出力をいずれかのターミナル (kterm、rxvtなど)のデバイスファイル (ktermなどは、/dev/ttyp0, /dev/ttyp1など) にリダイレクトしないといけません。 しかし、ktermなどのXターミナルは常に立ち上がっている 訳ではありませんので、コンソール(/dev/console)に リダイレクトするんでしょうね。 ですから、 > */15 7-21 * * * printf '\0007' > /dev/console で鳴ると思います。 前回の回答を書いた後に思いついたんですが、 音楽ファイルを鳴らす方がわかりやすいんでは? WindowsのC:\windows\mediaの中や、 (GNOMEやKDEがインストールされていれば) /usr/share/soundsに、wavファイルが いっぱい入ってるんで、そのうちの時報っぽいやつを 選んで、 > */15 7-21 * * * play jihou.wav というのはどうでしょう?当然、内部スピーカ内臓の サウンドボードでない限り、外部スピーカの電源を 常時ONにしないとだめですが。

chrilake
質問者

お礼

Fookyさん、たびたび、ありがとうございます。 リダイレクトを使えば良い訳ですね。 実はあまりリダイレクトは普段から使っていませんでしたので、世界が広がった気分です。 周りに詳しい人もいないので、壁にぶつかるとつまづきがちですがいろいろ教えて頂き、ありがとうございました。 また、何かと質問すると思いますのでよろしくお願いします。

その他の回答 (5)

  • Fooky
  • ベストアンサー率71% (59/82)
回答No.5

> linuxの現在の環境を全て復元する、という事を考えた場合、 > 小生は/etcをバックアップを取っているから、という理由からです。 なるほど。 確かに、/etc/cron.*と、/var/spool/cronをバックアップを取れば、 cronのスケジューリングのバックアップは取れますね。 もしかして、このホストのユーザはchrilakeさんだけなんでしょうか? そうだとすると、/var/spool/cronのバックアップまで取るのは 面倒だから、全て/etc/cron.*以下に置いてしまおう、という のも分かります。 crontab形式のファイルを編集して、/etc/cron.d(前回の回答では /etc/cron.dailyなどと一緒にして、ファイル形式がcrontabと 異なると言ってしまいましたが、/etc/cron.dの方は、普通の crontab形式のファイルです)に置き、crontab -eは逆に一切 使わないようにすることで、/var/spool/cronのバックアップを 取らずに、cronのスケジューリングを復元することは可能でしょう。 あと、ビープのことですが、ASCIIコードの7番はビープに 割り当てられていますので、7番の文字を表示してやれば ビープは鳴ります。ただし、シェルのnobeep変数や visiblebell変数がセットされていると、beepが鳴らなかったり 画面フラッシュに置き換えられたりします。 ASCIIコード7番の表示方法としては、 printf '\0007' とかやればOKです。Cのライブラリ関数のprintfではなく、 シェルコマンドのprintfです。無い場合は、 perl -e 'printf "%c", 7;' など。 あと、beep2っていうRPMパッケージが、手元にある Kondara MNU Linux 2.0には入っていました。 これは、beepの音程や長さを自由に調節できる beepコマンドだそうです。

chrilake
質問者

補足

ご返事が遅くなりました。 すみません、恐れ入りますができればあと一つ、教えてください。 crontabでdumpは問題なくできました。 しかし、BEEPがうまくいきませんでした。 rootのspoolにその都度メールが届いているようなのですが・・・。 rootのコマンドラインから、printf '\0007'、perl -e 'printf "%c",7;'を実行すればちゃんと音がなります。 しかし、crontabではなりませんでした。 crontab -eでdumpに続いて追加したものは下記のようなものです。 */15 7-21 * * * printf '\0007' (→鳴らなかった) 続けて、echo 0000などと、設定してみたのですが画面に文字は出ませんでした。 なにか、勘違いでもしているのでしょうか? お願いします。

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.4

> >ファイルを指定する場合には、直前の定義に追加するのではなく *置き換える* と > >いうことを理解しているのであれば良いです。 > > 少し、この意味が理解出来ておりません・・・。 ちょっと、くどい書き方でしたね。 cron で起動する処理を一つ増やしたいと思ったときには、用意するファイル には、増やす処理だけしか書かないですよね。そのファイルで % crontab ファイル としてしまうと、前に書いたのが「ぱぁ」になってしまうよ、ということです。 元々、cron の定義がテキストファイルで保存されていることを想像するなら それとは別に "crontab ファイル名" するために、全部の処理を書いてある ファイルをもう一つ用意しておくのは意味無いですもんね。 追加する行だけが、別のファイルにある場合には、crontab -e で vi を 起動して、:r で読込むのが良いかと。 「時報を鳴らす」方については、ちょっと回答できまへん m(_ _)m

chrilake
質問者

お礼

お礼が大変遅くなりました。 いろいろな角度から教えて頂き、大変勉強になりました。 また、よろしくお願いします。

  • Fooky
  • ベストアンサー率71% (59/82)
回答No.3

(1)crontab -e で作成したファイルはどこにいってしまったのでしょうか。 /var/spool/cron/ユーザ名 です。(RedHat系Linux) (2)/etcに、/etc/cron.daily、…とありますが、これらはcrontab -eで作成したファイルと関係あるのでしょうか。 /var/spool/cron以下にはユーザがcrontabコマンドで作ったcrontabファイルが 置かれます。/etc/cron.d などの下には、システムメンテ用のファイルが 置かれます。ファイルのフォーマットも、両者を見て頂いたら分かりますが、 異なっています。/etc/cron*以下のものは、そのディレクトリ名を見れば 分かるように、日毎、週毎など、いつ実行するかはすでにディレクトリ名 で指定されていますので、ユーザ用のcrontabファイルの様に、各行の 先頭5コラムで実行時間を指定することはありません。 ここをユーザ用に開放してはいけない、という道理はありませんが、 ユーザにはcrontabコマンドでやってもらえば良いかと思います。 (3)別のマシンにこれらの/etcをコピーすれば同じ処理ができるのでしょうか。 できます。Linuxのディストリビューションが違っていたりしてシステム構成が 異なっている、などで無い限り、問題ないと思います。 (4)crontabの処理を追加していくには、crontab -e でviを起動し、追加していけばそれでよいのでしょうか。 ユーザに関してはその通りです。システム管理用は、/etc/cron*以下を 直接いじればいいと思います。 (5)処理したいファイルを書き、crontab ファイル名 という方法もあるようですが、 この書いたファイルは/etc以下に置いても良いのでしょうか。 /etc/cron*じゃなくて、/var/spool/cronですね。しかし、なぜそうしたいのか、 よく分かりません。やめて置いた方がいいんじゃないでしょうか? 私のイメージとしては、crontab -eやcrontab ファイル名 で作成したファイルを、 crontabが「コンパイル」して(実際はコピーするだけですが)、 適切なディレクトリに勝手に置いてくれる、という感じですので、わざわざ crontabコマンドがやっていることをユーザがやる、なんていうのは 害はありそうですが、利は無いように思います。 もちろん、システム管理用の/etc/cron*ディレクトリ以下のファイルは、 スーパーユーザがエディタで編集するなどして、直接管理してください。

chrilake
質問者

補足

すみません、書き忘れました。RHL7です。 >/etc/cron*じゃなくて、/var/spool/cronですね。 >しかし、なぜそうしたいのか、よく分かりません。 linuxの現在の環境を全て復元する、という事を考えた場合、小生は/etcをバックアップを取っているから、という理由からです。 あまり、crontabで複雑な事はしていないのですが、念のため/var/spool/cron/(root)もバックアップしておいた方がいいのでしょうか? しかし、(3)の愚問にご回答いただいた事によると、できる、という事になるのですね。(crontab -eで作成したものが、/etc配下のファイルに自動的に反映されているということか?) あと、すみませんが、crontabで時報を鳴らして見たいのですが、BEEPのようなコマンド、そのrpmファイル名を教えてもらえればありがたいのですが、こんなものはありますでしょうか。

  • mkim
  • ベストアンサー率67% (25/37)
回答No.2

どもども^^ crontab -e での内容を適当に作成したファイルにコピー。 ほんで、処理を追加する。 それから、crontabコマンドを使って、その作成したファイルを認識させれば、 そのファイルに書いてある内容で動くかもです。。。 Linuxって、出来たかな。。。(自信無し)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> (1)crontab -e で作成したファイルはどこにいってしまったのでしょうか これは OS によって違います。たぶん linux ですね。であれば、/var/cron/tabs 配下に、そのユーザ名と同じ名前のファイルとしてあるはず。 man crontab か man cron で確認できるはず。 > (2)/etcに、/etc/cron.daily、/etc/cron.monthly、/etc/cron.weekly、/etc/cron.d > /etc/cron.hourly、とありますが、これらはcrontab -eで作成したファイルと関係あるのでしょうか。 linux の cron は、普通の unix の cron と違って、/etc/crontab 配下も見に行く らしいです。 > (3)別のマシンにこれらの/etcをコピーすれば同じ処理ができるのでしょうか。 ファイルの所有者に気をつければ大丈夫だと思います。 > (4)crontabの処理を追加していくには、crontab -e でviを起動し、追加していけばそれでよいのでしょうか。 これが普通のやり方です。 > (5)処理したいファイルを書き、crontab ファイル名 という方法もあるようですが、 > この書いたファイルは/etc以下に置いても良いのでしょうか。 ファイルを指定する場合には、直前の定義に追加するのではなく *置き換える* と いうことを理解しているのであれば良いです。 どこにファイルが配置されているかを理解しなくても、定期的な処理の実行が できるように crontab コマンドがあるんです。素直に crontab コマンドを使いましょう。 他の unix でも同じように使える、という利点もあるし。 例えば、Solaris だと /var/spool/cron/crontab 配下にファイルが置かれます。 いちいち憶えてらんないでしょ?

chrilake
質問者

補足

すみません、書き忘れました。RHL7です。 >ファイルを指定する場合には、直前の定義に追加するのではなく *置き換える* と >いうことを理解しているのであれば良いです。 少し、この意味が理解出来ておりません・・・。 余り神経質にならないほうが良いのでしょうか!? しかしながら、手持ちの数冊のRHLのどの本にも書かれていないような事を教えてもらってありがとうございます。 あと、ANo.#3のFookyさんにも補足で書いたのですが、crontabで時報を鳴らして見たいのですが、BEEPのようなコマンド、そのrpmファイル名を教えてもらえればありがたいのですが、こんなものはありますでしょうか。

関連するQ&A