GNU/Linux >> Linux の 問題 >  >> Linux

Crontab の問題:パーセンテージを使用すると Cron ジョブが機能しない

質問: cron ジョブでパーセンテージ「%」を使用すると、cron ジョブが実行されない理由は何ですか。この問題を解決するにはどうすればよいですか?

答え: 「%」は cron コマンドの改行指定子です。したがって、% を使用すると、cron ジョブの新しい行として解釈されます。この問題を克服し、cron ジョブで % を使用する方法を見てみましょう。

問題の定義の例:cron ジョブの「%」(cron ジョブが成功しない)

* * * * * date +"%d" >> /tmp/non-working-ex1.txt

 
テスト目的で、上記の crontab の例のすべてのフィールドに * が含まれています。これにより、指定された cronjob が毎分実行されます。
 
crontab の構成を理解するには、15 の素晴らしい cron ジョブの例を含む以前の記事をお読みください。
 
syslog にアクセスできる場合は、次のような同様の行が表示されます。

Jun 20 08:31:01 ubuntu-laptop /USR/SBIN/CRON[6752]: (ramesh) CMD (date +")

 
この特定の例の syslog エントリでは、コマンドは次のようにのみ表示されます:(date +”) .理想的には、これは次のように表示されるべきです:date +”%d” .これは、パーセンテージが cron で特別な記号として解析されることを示します。つまり、正確に %age でコマンドを終了します。

解決策の例:cron ジョブで「%」を使用するように回避します。

この問題は、次の 2 つの方法で解決できます。このソリューションは、Ubuntu、Debian、Fedora、RedHat、CentOS、AIX などを含む Unix / Linux のすべてのフレーバーの問題を解決するはずです。

方法 1:\

でパーセンテージをエスケープする

バックスラッシュでパーセンテージをエスケープし、通常のジョブとして機能させることができます。

$ crontab -l
* * * * * date +"\%M" > /tmp/working-ex1.txt

 
注: この「\」は、date コマンドやその他のコマンドでは表示されません。 \ は、cron のパーセンテージの特別な動作をエスケープするためのものです。

方法 2:シェル スクリプトを使用する

パーセンテージ コマンドでシェル スクリプトを作成し、シェル スクリプトを cron ジョブとしてスケジュールします。

$ cat /bin/date.sh
date +"%d"

$ crontab -l
* * * * * /bin/sh /bin/date.sh > /tmp/working-ex2.txt

次の分で、実行されたコマンドが /tmp/working-ex2.txt に出力されます
 
これで、syslog にコマンドが正常に実行された次の行が表示されます。

Jun 20 08:36:01 ubuntu-laptop /USR/SBIN/CRON[6962]: (ramesh) CMD (/bin/sh /bin/date.sh >> /tmp/working-ex2.txt)

 
注: これらのテスト cron エントリは毎分実行されるため、忘れずに削除してください。
 
crontab に関するその他の問題がありましたら、コメント セクションでお知らせください。


Linux
  1. Linux – Uefi / biosで動作するのにUsbがLinuxで動作しないのはなぜですか?

  2. 起動時にキーボードが機能しない問題?

  3. cronジョブが実行されていませんか?

  1. スクリプト実行時の重複したcronジョブの管理

  2. Linux:フォアグラウンドで cron ジョブを実行する

  3. 現在実行中の cron ジョブを表示するには?

  1. Linuxでの使い捨てcronジョブにatを使用する

  2. sudo の使用時にコマンドが見つからない

  3. crontab が機能しないのはなぜですか? どうすればトラブルシューティングできますか?