web-dev-qa-db-ja.com

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

私はpythonスクリプトを毎分実行するために取得しようとしているダーツをたくさん投げました。そのため、「機能する可能性のある最も単純なこと」を実行するだけに簡略化すると思いました。 1分に1回(私はdebian/testingを実行しています)。

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

* * * * * /bin/touch /home/me/Ding_dong

それはrootによって所有され、実行可能です(どちらかが重要かどうかは不明です)。そして私はしました:

Sudo service cron reload

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

明らかに、ここで愚かな何かが欠けています。

33
Travis Griggs

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

* * * * * root /bin/touch /home/me/Ding_dong

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

45
noggerl

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

* * * * * /bin/touch /home/me/Ding_dong

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

* * * * * USERNAME /bin/touch /home/me/Ding_dong

(@VogonPoetLaureateで提案されている)良いトリックは、それらのデバッグに役立つcronジョブの標準エラーをキャプチャすることです。例えば:

* * * * * /bin/touch /home/me/Ding_dong 2>/tmp/error
3
terdon

ここで起こり得る間違いは、how1行のファイルが作成されることです。 buntuドキュメント から:

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

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

printf "* * * * * /bin/touch /home/me/Ding_dong" > /etc/cron.d/Ding_dong
2
okoloBasii