特定の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
Crontabエントリの構文は正しいようです。実際、「crontab -e
」を使用してcrontabを編集する場合(必要に応じて)、とにかく構文的に無効なcrontabエントリを指定すると、エラーが発生します。
最初に、/path_to_my_php_script/info.php
はコマンドラインから正しく実行されますか?
その場合、次のように正しく実行されますか?:
/bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
それが機能する場合、このように機能しますか?
/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
」コマンドにも適用されます。
非常にまれですが、サービスが実行されていても、cronが正常に動作しなくなることがあります。 crondが実行されていることを確認し、サービスを停止/開始する方法を次に示します。
Linuxの場合:
service crond status
service crond stop
service crond start
Ubuntuの場合:
service cron status
service cron stop
service cron start
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
Terminalコマンドでアクティブなcronを確認できます。
crontab -l
パラメーターを順番に示します。
分(0〜59)
時間(0から23)
月の日(1-31)
月(1〜12)
曜日(0-6)(日曜日= 0)
コマンド
したがって、毎時間の最初の1分ごとにスクリプトを呼び出しています。テストの目的で、より頻繁に出力をテストする必要があります。
* * * * * <command> #Runs every minute
これは毎分呼び出します!
各行の時間部分では、この cronテスター を使用して、cron時間定義をテスト/検証できます。
run-parts
を使用して、cronジョブを帯域外で実行することもできます。実際には、cronは定期的なcronジョブを実行するためにcronを使用するため、適切な引数を指定することで、いつでも実行できます。
たとえば/etc/cron.daily
で定義されているすべてのcronジョブの代わりに1つのファイルを実行する場合は、有効な正規表現とともに正規表現引数を指定する必要があります。 run-parts --list --regex '^p.*d$' /etc
通常、cronジョブは拡張子なしで名前が付けられ、実行可能としてマークされるため、スクリプトが類似していることを確認してください。ただし、正規表現を使用すると、拡張子付きのスクリプトをトリガーできる場合があります。
ああ!!
自分で答えを得たが、チェックしてデフォルトのインストールディレクトリ内にcrond
が見つからなかった。つまり、/etc/init.d/
今すぐ試して返信します。
注-cron.allow
、cron.deny
も確認しました。これまでのところ、すべて順調です。