crontabジョブは実行されません

crontabジョブは実行されません

私は"Hello World"を/tmp/example.txt

スクリーンショットに示すように、私は次のことを試しました。

28 23 * * * echo "Hello World" >> /tmp/example.txt

28 23 * * * root /bin/bash echo "Hello World" >> /tmp/example.txt

また、スクリーンショットに示すように、日付。私も手に入れようとしました。正確な日付cron操作(28 23 29 11 4など)では、この方法も機能しません。

私も実際のファイルを使ってみました。

28 23 * * * ./pingstuff

これ平らなものファイルをGoogleにpingするだけです。このファイルを実行でき、正しく実行されます。しかし、crontab -eで使用しようとすると、スケジュールされた時間に何も起こりません。 (試行するたびに時間が変わります。)

私はスーパーユーザーとしてログインしました。これらすべてのファイルを読み取り、書き込み、実行する権限があります。何が間違っているのかわかりません。

ここに画像の説明を入力してください。

答え1

cronjobが実行されない理由は次のとおりです。

  • cronデーモンが実行されていません
  • crontabの構文エラー
  • コマンドに構文エラーがあります。
  • または権限の問題があります(例:実行ビットが設定されていません)

デーモンが実行されていることを確認するには、service cron statusまたはsystemctl status cron(サービス管理者はディストリビューションによって異なります)を試してください。デーモンの名前は、crondまたはのように若干異なる場合がありますcronie
実行していない場合は起動します(statusに置き換えますstart)。

実行している場合は、関連するログファイルを確認して、ジョブが実際に実行されていることを確認してください。ディストリビューションによっては、このようなデーモン関連ファイルまたは/var/log/syslogシステムバイナリログファイル(ビュー用)に書き込むことができます。各ジョブ実行の行を表示する必要があります。/var/log/messages/var/log/cronjournalctl -u cron

crontabをテストするときの実行時間を設定してください。もっと次の分で。一部の cron 実装では、実行するタスクを「事前計画」します。つまり、12:34:00 に実行するジョブを 12:33:00 に決定するので、12:33: 34 12 …00 に cronjob を追加すると、次のことを見逃す可能性があります.チャンスの窓:30。

/bin/shジョブが実行されても期待される結果が生成されない場合は、同じシェル(通常はミニマリスト)を使用して、同じユーザーとしてcrontabでコマンドを手動で実行してみてください。
一般的なトラップ(ここではそうではありませんが)はコマンドの文字にあります。文字はcronによって特別に処理され、実際のコマンド呼び出しで表示されるように%エスケープ()する必要があります。ほとんどのcron実装では、各cronjob(存在する場合)の出力も電子メールで送信されます。インターネット経由のメール配信を設定していない場合は、これらのメッセージをローカルに保存してこのコマンドを使用して読み取る必要があります。\%
mail

答え2

最大の問題は、これが/bin/bash echo "Hello World" 有効なコマンドではないことです。というスクリプトを探しますecho。試して/bin/bash -c 'echo "Hello World"'みてください。

第二の問題はpingstuff

私の注意を引いた3番目の問題は、問題が/tmp/example.txt すでに存在していることです(catコマンドに関するエラーメッセージは表示されません)。書き込み権限がありますか? (もちろん、rootで実行する場合には問題になりません。)

また、見ることができますUbuntu 14.04、16.04、18.04 Cronジョブは実行されません。、関係がないかもしれません。

答え3

さまざまなcrontabファイルには2つのcrontab構文があります。最初のフォーム:

28 23 * * * echo "Hello World" >> /tmp/example.txt

ユーザーcrontabに適用されます。これはを使用して編集されますcrontab -e

第二形態:

28 23 * * * root /bin/bash echo "Hello World" >> /tmp/example.txt

システム全体のcrontabファイルに追加のユーザー列があります/etc/crontab。したがって、edit crontab fileを使用しているため、crontab -e6番目のフィールドにユーザー名を指定しないでください。  cronコマンドを実行するとルートであるため、コマンドをルートとして実行する必要があることがわかります。6番目のフィールドcrontab -eに「root」と入力すると、名前付き cronプログラムを実行しようとしますroot

ただし、cronはシェルでコマンドを実行することに注意してください。また、2番目の例では、シェルを明示的に起動します。インタラクティブシェルでコマンドを試しましたか?

$ /bin/bash echo hello
/usr/bin/echo: /usr/bin/echo: cannot execute binary file

正しくテストするには、Hello World Shellスクリプトを使用できます。

#!/bin/bash
echo 'Hello, world!'

リダイレクトはスクリプト(単にスタイルガイド)ではなくcrontabで実行する必要があります。

任意のディレクトリに保存してhelloworld.sh実行可能にし(chmod +x helloworld.sh)、crontabでこのスクリプトを呼び出します。ユーザーcrontabまたはシステム全体のcrontabを使用している場合は注意してください。

したがって、ユーザーのcrontab()エントリはcrontab -e次のようになります。

28 23 * * * /path/to/helloworld.sh >> /tmp/example.txt

関連情報