回答:
何も間違っていません。意図したとおりに機能しています。*毎時/日/月の開始時に自身をリセットします。別の言い方をすれば、*は問題の値の最大範囲の代用です。そのため、分列の*は0〜59を表し、* / 40は「0から開始し、40分ごとに最大59まで実行する」ことを意味します。詳細については、cron Wikipediaページの「特殊文字」を参照してください。
おそらく必要なことは、20分ごとにジョブを実行し、プログラムに実行するかどうかを決定させることです。または、2行で実行します
0,40 0,2,4,6,8,10,12,14,16,18,20,22 * * * myshellcommand
20 1,3,5,7,9,11,13,15,17,19,21,23 * * * myshellcommand
これは、もう少しコンパクトな形式で記述できることに注意してください。
0,40 */2 * * * myshellcommand
20 1-23/2 * * * myshellcommand
この場合、* / 2は0から始まる1時間おきを示し(*は0-23に等しいため)、1-23 / 2は1時間から始まる1時間おきを示します。