1分あたりのcron.dジョブが実行されないのはなぜですか?


33

私は、私のスクリプトを毎分実行するダーツをたくさん投げました。それで、私はそれを単純化して、1分に1回「おそらく動作する可能性のある最も単純なこと」を行うと思いました(debian / testingを実行しています)。

私は1行のファイルを作成しました/etc/cron.d/perminute

* * * * * /bin/touch /home/me/ding_dong

rootが所有し、実行可能です(どちらが重要かはわかりません)。そして、私はやった:

sudo service cron reload

そして、座っls -ltrてホームディレクトリで何度も実行を開始します(/home/me)。しかし、私のding_dongファイルは表示されません。を実行するとsudo /bin/touch /home/me/ding_dong、すぐに表示されます。

ここで明らかにバカなものが欠落しています。


3
cron.dの変更を適用するためにcronデーモンサービスをリロードすることは、とにかく毎分新しいファイルと更新されたファイルのディレクトリを再スキャンするため、通常は不要です。
ジョシップロダン

回答:


45

/etc/cron.d/またはでcron構成/etc/crontabを追加する場合は、例でコマンドを実行するコンテキストでユーザー名を追加する必要があります

* * * * * root /bin/touch /home/me/ding_dong

そして、私からのヒント:あなたは何度も何度も実行を開始する必要はありませんls -ltr、使用するだけで、watch -n 5 "ls -ltr"5秒ごとにコマンドを実行します(または5を必要なものに置き換えて他の値)。


9
これにより、正しい方向に進むことができました。それは頭がおかしい瞬間でした。私はそれを修正しましたが、それでもまだ動作しませんでした。man cron少し遅く読んで、DEBIAN specificセクションに特別な注意を払った後、ファイルがグループまたは他の書き込み可能であってはならないことに気付きました。私はある時点でフラストレーションの中でそれを可能にした。
トラビスグリッグス

スクリプトの所有者をrootに変更することもできませんでしたか?
ジェレミア

この特定の行は私を助けました。From man cron:さらに、Debianでは、cronは/etc/cron.dディレクトリ内のファイルを読み取ります。cronは/etc/cron.d内のファイルを/ etc / crontabファイルと同じように扱います(それらはそのファイルの特別な形式に従います。つまり、ユーザーフィールドが含まれます)。ただし、これらは/ etc / crontabから独立しています。たとえば、環境変数設定を継承しません。この変更はDebianに固有のものです。以下のDEBIAN SPECIFICにある注意をご覧ください。
ハーパービル

また、man 8 cron(Debian版)は、/ etc / cron.d /内のファイルには英数字、「-」および「_」のみを含めることができると言っています。具体的には、ドットはありません。
mpartel

3

新しいcronジョブを作成するには、ジョブを実行crontab -eするユーザーとして実行する必要があります。次に、表示されるエディターウィンドウに関連する行を追加します。

* * * * * /bin/touch /home/me/ding_dong

あなたがそれをやっている方法は異なるフォーマットを必要とし、とにかく本当に良いアイデアではありません。Crontabの/etc/cron.d形式はわずかに異なります。Crontabではユーザー名を実行する必要があります。例えば:

* * * * * USERNAME /bin/touch /home/me/ding_dong

優れたトリック(@VogonPoetLaureateが示唆する)は、cronジョブの標準エラーをキャプチャして、それらをデバッグするのに役立ちます。例えば:

* * * * * /bin/touch /home/me/ding_dong 2>/tmp/error

6
cron.dが「良いアイデアではない」と言う理由はまったくありません。cronデーモンはcron.d stderrの出力をユーザー名にそのまま送信します。別の電子メールアドレスにリダイレクトする場合は、MAILTO変数を使用できます。
ジョシップロダン

@JosipRodinは、rootで実行されておらず、ユーザーがセットアップするものについてはお勧めできません。マルチユーザーシステムのシステム管理者にとっては理にかなっていますが、自分のマシンでは、すべてを自分のcrontabに置く方が簡単なので、crontab -lすべてのcronジョブをチェックして一覧表示する場所は1つだけです。
テルドン

それは本当に個人的なcronジョブであり、OPが実際に明確にしたわけではないことを前提としています-一般的に、cron.dを介して設定された非特権ユーザーcronジョブ用のアプリケーションはたくさんありますサービスユーザーの隔離、自動化された展開の容易化など。
JosipRodin

@JosipRodin絶対に。i)エンタープライズシステムはここでは話題にならず、ii)質問は非エキスパートユーザーを示唆したため、私は個人システムを想定しました。
テルドン

OK、私はもはやので:)スーパーユーザとserverfaultのとUNIX SEのサイト間の共通の混乱のことに読み込まないと思います
ヨシップ・ロダン

2

ここで可能な間違いがあるどのように 単一行ファイルが作成されます。Ubuntuドキュメントから:

... lineには5つの日時フィールドがあり、コマンドと改行文字が続きます

たとえば、次の作成方法は機能しません。

printf "* * * * * /bin/touch /home/me/ding_dong" > /etc/cron.d/ding_dong
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.