タイムゾーンの変更後、cronジョブが起動しない


13

一般的なエラーの多くを排除しようとしましたが、

  1. cronのPATHが利用可能であることを確認する

  2. crontabファイルの最後にエンドラインがあります

  3. タイムゾーンは次によって設定されます:

    cd /etc
    cp /usr/share/zoneinfo/Asia/Singapore /etc/localtime
    

datebashで実行すると、次のようになります。

Tue Sep 17 15:14:30 SGT 2013

cronが同じ時間を使用しているかどうかを確認するには、

* * * * * date >> date.txt

date.txtに同じ日付を出力しています。

これは私が実行しようとしているスクリプトです:

event.sh

#!/usr/bin/env bash
echo data > /root/data.txt

を使用するcrontab -eと、以下の行が機能します。

* * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

15 * * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

ただし、他の引数を試してみると、午後2時50分に実行されることを期待しています。

50 14 * * * /bin/bash /root/event.sh >/tmp/debug.log 2>&1

または

50 14 * * * (cd /root ; ./event.sh >/tmp/debug.log 2>&1)

動作しなくなります。私の時間引数に問題があるようです。/tmp/debug.logファイルにも何も見つかりませんでした。

解決:

TZに変更を加えた後、cronサービスを再起動する必要があることがわかりました。


1
ログにエラーがありますか?試してみるのではなく絶対パスで~/event.sh試してください/home/username/event.sh
Rahul Patil

1
また、のような小さな修正を行う* * * * * /bin/bash /root/event.sh >/tmp/debuge.log 2>&1
ラーフルパティル

1
あなたはタイムゾーンが正しく設定されていると言いますが、あなたはそれを絶対に確信していますか?のようなエントリを追加してみて、予想される時間* * * * * datedate示していることを確認してください。crontab内からTZ環境変数を設定しても、cronデーモン自体が使用するタイムゾーンには影響しない可能性ありますが、cronを介して起動されるプロセスに影響するため、crontabでTZを設定する場合は一時的にコメントアウトすることをお勧めします代わりにシステムクロックのタイムゾーン(Linuxをシングルブートしている場合はUTCである可能性ありますが、ローカル時間である可能性あります)を使用して時間を設定します。
CVn

1
ポイント@adsiscoがありません。crontabにある可能性のあるTZディレクティブをすべて削除してから、もう一度試してください。それは、私たちはタイムゾーンのcronは。の/ etc / localtimeの中の時間フィールドは表示のみではなく、システムクロックに影響を与え、私が望んでいるものを見せ、日付自体デーモンのcronが行うのと同じTZで実行させるだろう疑うそれはcronの影響を与えます。このテストを行うことで、問題がタイムゾーンに関係していないことを確認できます(率直に言って、私にはそう思われます)。
CVn

1
実際には、システムを再起動することで修正したと思います... TZに変更を加えた後、cronサービスを再起動する必要があるのでしょうか?@MichaelKjörling。ありがとう!タイムゾーンの問題の可能性を指摘してくれました。
-adsisco

回答:


7

まず、1つのフィールドが誤って考慮されるバグにぶつかる確率は非常に低いようです。何が起こっているのか、cronが何を期待しているのかを誤解している可能性が高くなります。

この場合、質問に対するコメントで、タイムゾーン関連の問題である可能性が高いことがわかりました。このために、あなたは:

  • * * * * * datecrontab などにエントリを追加します
  • crontabからTZの割り当てを削除(またはコメントアウト)します

これdateにより、呼び出し側のタイムゾーン設定、つまりcronデーモンで強制的に実行されます。出力を見てください。cronが内部で使用しているタイムゾーンを示します。したがって、どのタイムゾーンにタイムフィールドが必要かを示す可能性が高くなります。コマンドを呼び出しましたが、cron自体は他のタイムゾーンを使用します。TZ割り当てをコメント化または削除することにより、このあいまいさを回避できます。

また、システムのグローバルタイムゾーン設定(/ etc / localtimeなど)を変更するには、ほぼ確実に少なくともcronデーモンを再起動する必要があります。crontabでTZ割り当てを編集する場合、cronデーモンを再ロードする必要はありません。ファイルが変更されたことを検出し、自動的に再ロードするためです。

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