web-dev-qa-db-ja.com

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

特定の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
79
resizemyimg.com

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はデフォルトでbashではなく/bin/shを使用することに注意してください。 bashが必要な場合は、これをcrontabファイルの先頭にも追加します。

Shell=/bin/bash

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

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

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

69
jamesodhunt

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

Linuxの場合:

service crond status
service crond stop
service crond start

Ubuntuの場合:

service cron status
service cron stop
service cron start
44
user53817

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 
31
rubiojr

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

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

18
bioShark

各行の時間部分では、この cronテスター を使用して、cron時間定義をテスト/検証できます。

10
Ashish Karpe

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

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

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

2
dragon788

ああ!!

自分で答えを得たが、チェックしてデフォルトのインストールディレクトリ内にcrondが見つからなかった。つまり、/etc/init.d/

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

注-cron.allowcron.denyも確認しました。これまでのところ、すべて順調です。

1
luckbychance