crontabが機能するかどうかを確認する


82

特定のcrontabが適切に機能するかどうかを確認したい。私はこのような仕事を追加しました:

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1

私はヌルデバイスにリダイレクトすることを知っていますが、上記のコマンドが良いかどうかわかりません。

*編集1:/ var / log / syslogに2分ごとに次のエラーがあります。

 (CRON) error (grandchild #2788 failed with exit status 2)

*編集2:この新しいジョブのログにはエラーがありません:

 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1

残念ながら上記のすべてが試してみましたが、私にはうまくいきません。あなたが言うように、試用版/ bin / sh -c "(export PATH = / bin; /tmp/trial.sh </ dev / null)"は以下のメッセージを表示します。 :識別子ではありません

回答:


73

crontabエントリの構文は正しいようです。実際、「crontab -e」を使用してcrontabを編集する場合(必要に応じて)、とにかく構文的に無効なcrontabエントリを指定すると、エラーが発生します。

  1. まず、/path_to_my_php_script/info.phpコマンドラインから正しく実行されますか?

  2. もしそうなら、それはこのように正しく実行されますか?:

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. それが機能する場合、このように機能しますか?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
    

ステップ(3)は、cronがプログラムを実行する方法に似ています(「man 5 cron」で説明されています)。

あなたが抱えている最も可能性の高い問題は、PATH cronがプログラムの実行に使用している制限が強すぎることです。したがって、次のようなものをcrontabエントリの先頭に追加することをお勧めします(スクリプトで必要なディレクトリに追加する必要があります)。

PATH=~/bin:/usr/bin/:/bin

また、cronはデフォルトで/bin/shbashではなくを使用することに注意してください。bashが必要な場合は、これをcrontabファイルの先頭にも追加します。

SHELL=/bin/bash

これらの変更は両方ともすべてのcrontabエントリに影響することに注意してください。info.phpプログラムのこれらの値を変更したいだけなら、次のようなことができます。

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

「メール」用に構成されたシステム(つまり、[sendmail / postfix / etc]が構成されたシステム)では、crontabプログラムからのすべての出力が電子メールで自動的に送信されることにも言及する価値があります。デフォルトのUbuntuデスクトップシステムにはローカルメールが設定されていませんが、サーバーで作業している場合は、ターミナルで「mail」と入力するだけですべてのcronメールを表示できます。これは、「at」コマンドにも適用されます。


2
2番目のステップで許可が拒否されました。私は何をすべきか?
あきから

@akikara chmod + x ./cron.sh-./cron.shを、実行しようとしているファイルの任意の場所に置き換えます
Tisch

46

非常にまれですが、サービスが実行されていても、cronが正常に動作しなくなることがあります。crondが実行されていることを確認し、サービスを停止/開始する方法を次に示します。

Linuxの場合:

service crond status
service crond stop
service crond start

Ubuntuおよびその他のDebianベースのシステム:

service cron status
service cron stop
service cron start

13
ただ、ノート... Ubuntuのために、それはだcron、ではないcrond
アミットコーリ

32

cron出力用にエラー出力を/ dev / nullおよびgrep / var / log / syslogにリダイレクトしないでください。

grep cron /var/log/syslog

編集後のファイル/etc/crontabまたは内部のファイルを保存するときに、すぐにエラーを表示できます/etc/cron.d/

tail -f /var/log/syslog | grep --line-buffered cron

編集に問題がない場合は、RELOAD通知のみが表示され、次のようなエラーが発生します

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 

18

terminalコマンドでアクティブなcronを確認できます。

crontab -l

パラメーターを順番に示します。

  1. 分(0〜59)

  2. 時間(0から23)

  3. 月の日(1-31)

  4. 月(1〜12)

  5. 曜日(0-6)(日曜日= 0)

  6. コマンド

したがって、毎時間の最初の1分ごとにスクリプトを呼び出しています。テストの目的で、より頻繁に出力をテストする必要があります。

* * * * * <command> #Runs every minute

これは毎分呼び出します!


* / 2 * * * *私は今、2分ごとに変更されました
croppio.com


2

run-partscronジョブを帯域外で実行するためにも使用できると思います。実際には、cronは定期的なcronジョブを実行するためにcron自体を使用するため、適切な引数を指定することで、いつでも実行できます。

たとえば、で定義されているすべてのcronジョブの代わりに1つのファイルを実行/etc/cron.dailyする場合は、有効な正規表現とともに正規表現引数を指定する必要があります。run-parts --list --regex '^p.*d$' /etc

cronジョブには通常、拡張子なしで名前が付けられ、実行可能としてマークされることに注意してください。正規表現を使用すると、拡張子付きのスクリプトをトリガーできる場合があります。


1

ああ!!

自分で答えを得た、私はチェックしcrond、デフォルトのインストールディレクトリ内で見つけることができませんでした/etc/init.d/

今すぐ試して返信します。

注意-私は確認しなかったcron.allowcron.denyあまりにも。これまでのところ、すべて順調です。

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