私は"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/cron
journalctl -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 -e
6番目のフィールドにユーザー名を指定しないでください。
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