質問: 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 に関するその他の問題がありましたら、コメント セクションでお知らせください。