web-dev-qa-db-ja.com

1時間ごとのcronジョブが実行されたかどうかを確認するにはどうすればよいですか?

/etc/cron.hourlyntpdateというファイルを作成しました

#!/bin/sh
/usr/sbin/ntpdate-debian
date > /tmp/william_tmp
date > /william_tmp
date > ~/william_tmp
echo test

また、このファイルに対してChmod 755を実行しました。

ただし、ファイルが実行されたかどうかはわかりません!

ファイルは3つのディレクトリのいずれにも作成されません。

cd / && run-parts --report /etc/cron.hourlyを手動で実行すると、ファイルが作成され、エコーが表示されます。

誰でもそれが機能していることをテストするための指示を(理想的には段階的に!)推奨することはできますか?

25
wilhil

Cronの大きな落とし穴の1つは、非常に限られたシェル環境でcronを実行することです。その結果、多くの変数が環境(主に$ PATH)にエクスポートされません。 echouptimedateなどの一般的な関数を含む、実行可能ファイルへのすべての絶対パスを使用するようにしてください。すべてフルパス(/bin/echo/bin/date/usr/bin/uptime)。実行可能ファイルへのパスを決定するには、次のようにwhichコマンドを使用できます。which echo-このツールへの完全なパスが表示されます。

25
Marco Ceppi

/var/log/syslogログファイルを確認する必要があります。 cronが実行されている場合、次のような行があります。

Jun 11 19:09:01 penguin CRON[17376]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Jun 11 19:17:01 penguin CRON[17799]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

トラブルシューティングのヒントについては、 https://help.ubuntu.com/community/CronHowto#Troubleshooting_and_Common_Problems をご覧ください。

36
Lekensteyn

スクリプトの最初の行(インタープリター)を次のように変更してください。

#!/bin/bash

過去にも環境変数とPATHの問題で問題がありました。インタープリターをbashに変更した後、私の問題はなくなりました。

2
Awi

clearme.sh/etc/cron.hourly/スクリプトを追加した場合

強力なegrepおよびawkterminalのCRONタスクをフィルタリングするだけです:

$ cat /var/log/syslog | egrep clearme | awk "{ print $1 }" > ~/Desktop/cronlog.txt

出力は次のようになります。

Jan 14 15:20:01 markets-dev CRON[10089]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 15:40:01 markets-dev CRON[18042]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:00:01 markets-dev CRON[22817]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:20:01 markets-dev CRON[28183]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:40:01 markets-dev CRON[411]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:00:01 markets-dev CRON[5442]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:20:01 markets-dev CRON[11935]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)

すべてを段階的に説明するには:

  1. cat/var/log/syslog-システムログを印刷してください
  2. egrep clearme-ただし、テキストを含む行のみを選択clearme
  3. awk "{print $ 1}"-テキストを含む行を出力clearme
  4. >〜/ Desktop/cronlog.txt-結果をファイルに出力cronlog.txtデスクトップディレクトリ。

4番目のステップはオプションです。ファイルの代わりに結果を端末に出力するだけです。