1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

OpenShift3.11のCronJobを試す

Last updated at Posted at 2019-07-15

変更履歴

ConcurrencyPolicyconcurrencyPolicy
頭文字が大文字「C」でもエラーはでませんが、オプションが効いていない状況になるそうです。
誤記申し訳ありません。

はじめに

OpenShiftでPodを色々立ち上げてみてますが、
Cronが利用したくなるシーンがままありますよね(^_-)-☆

そんな訳で3.9以降で実装されているCronJobを試してみます!
Red Hat OpenShift 3.11 【第38章 Cronジョブ

CronJobの定義

RedHatのサンプルをカスタマイズして作成してみます。
今回はWordPressのバックアップJobを呼び出す設定にしてみます。
WordpressのバックアップJobのオプションはここでは記載しませんが、専用のURLをCallする形となります。

サンプルからの変更箇所は
 imageをperlからbusyboxにしてコマンドを修正してみました。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: wp-cron
spec:
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 3
  concurrencyPolicy: "Forbid"
  schedule: "*/30 * * * *"
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            parent: "wp-cron"
        spec:
          containers:
          - name: wp-cron
            image: busybox
            command: ["wget",  "--spider", "http://wordpress-wordpress.192.168.42.178.nip.io/wp-cron.php?_nonce=39f47013&backwpup_run=runext&jobid=1"]
          restartPolicy: OnFailure
  • successfulJobsHistoryLimit...成功時の保持するJobの数(その分Podが生き続けます)

  • failedJobsHistoryLimit...失敗時の保持するJobの数(その分Podが生き続けます)

  • concurrencyPolicy...同時実行ポリシー

    • Allow...同時に実行します。
    • Forbid...同時実行を禁止し、直前の実行が終了していない場合は次の実行を省略します。
    • Replace...同時に実行されているジョブを取り消し、新規ジョブに置き換えます。
  • schedule...Cron形式でスケジュールを登録します。

  • busyboxの最新版のマニュアルにあるwgetのオプションは-sでしたが、OpenShiftに入っているbusyboxのバージョン的には--spiderだったようです。

Cronjobの登録

Overview画面でも何処でも良いので、Import YAML/JSONから登録します。
途中警告が表示されますが、**[Create Anyway]**で構わず登録

無題5-1.png
無題5-2.png
無題5-3.png
無題5-4.png

Cronjobの確認

登録したJobを確認したいのですが…okdのどの画面をみても登録したはずのwp-cronがない…(汗
初回登録した時間が来たので確認したらApplications > Podsにありました!

無題2.png

CronJob名に定義した名前のPodをクリックすると詳細に飛びます。

無題3.png

実行結果はLog画面を参照すると標準出力の結果が出ています。

無題4.png

夜間(AM3:00)にCronJobを仕込んで翌朝確認したらLogが
Logs are not available.
やっぱ--spiderは良くなかったかな…(汗

ここでふと疑問に思ったことが…
CronJobを消すにはどうしたらいいのだろうか…

またokdの管理画面を探していくとRecources > Other Recourcesの中にjobなる文言が

無題2-1.png
無題2-2.png
無題2-3.png

ここで消えそうな気もしますが…
次回実行タスクだけが消える気もしないでもない。

Cronjobの変更

同じ名前でCronの時間のみを変更すると上書きするかどうか聞かれますので
ReplaceをクリックすればOkです。

無題6.png

Cronjobの削除

GUIからできんのかいっ!!

$ oc delete cronjob/<cron_job_name>
[tak@minishift ~]$ eval $(minishift oc-env)
[tak@minishift ~]$ oc login
Authentication required for https://192.168.42.178:8443 (openshift)
Username: developer
Password: ********
Login successful.

You have one project on this server: "wordpress"

Using project "wordpress".
[tak@minishift ~]$ oc get cronjob
NAME       SCHEDULE    SUSPEND   ACTIVE    LAST SCHEDULE   AGE
wp-cron    */30 * * * *   False     0         41m             2h
wp-cron2   0 3 * * *   False     0         <none>          47m
[tak@minishift ~]$ oc delete cronjob/wp-cron2
cronjob.batch "wp-cron2" deleted
[tak@minishift ~]$ oc get cronjob
NAME      SCHEDULE    SUSPEND   ACTIVE    LAST SCHEDULE   AGE
wp-cron   */30 * * * *   False     0         41m             2h
[tak@minishift ~]$ 

Cronjobのシステム全体での確認(要Admin権限)

基盤を守るうえではCronjobが乱立するのは避けたいですよね。
それに何処で何のCronjobが登録されているか把握しておきたいですよね。

そんな場合は、Admin権限で以下のコマンドを叩けばOKです。

[tak@minishift ~]$ oc get --all-namespaces=true cronjob
NAMESPACE   NAME      SCHEDULE    SUSPEND   ACTIVE    LAST SCHEDULE   AGE
wordpress   wp-cron   */30 * * * *   False     0         1h              2h

minishiftでadmin権限って何!?って方はこちらを先にやってください。

[tak@minishift ~]$ oc login
Authentication required for https://192.168.42.178:8443 (openshift)
Username: admin
Password: ********
Login successful.

Using "default".  You can switch projects with:

 'oc project <projectname>'
[tak@minishift ~]$ minishift addons enable admin-user
Add-on 'admin-user' enabled
[tak@minishift ~]$ minishift addons apply admin-user
-- Applying addon 'admin-user':..

あれっ実行されない...

気をよくして実際にAM3:00にセットして翌朝を迎えましたが
実行されている気配がない

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: wp-cron
spec:
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 3
  concurrencyPolicy: "Forbid"
  schedule: "0 3 * * *"
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            parent: "wp-cron"
        spec:
          containers:
          - name: wp-cron
            image: busybox
            command: ["wget",  "--spider", "http://wordpress-wordpress.192.168.42.178.nip.io/wp-cron.php?_nonce=39f47013&backwpup_run=runext&jobid=1"]
          restartPolicy: OnFailure

色々試してみましたが...
ocコマンドでの確認はちゃんと出るのに時間指定すると実行されないようです(^^;

OKな場合

  schedule: "*/30 * * * *"
  schedule: "30 * * * *"

NGな場合

  schedule: "0 3 * * *"
  schedule: "0 03 * * *"

ここで、わたくし閃きました!GMTでした(笑)

AM3:00 JSTに走らせるためには-9:00して

  schedule: "0 18 * * *"

が正解でした♪

[tak@minishift ~]$ date
2019年  7月 16日 火曜日 09:55:17 JST
[tak@minishift ~]$ oc get --all-namespaces=true cronjob
NAMESPACE   NAME       SCHEDULE       SUSPEND   ACTIVE    LAST SCHEDULE   AGE
wordpress   wp-cron    55 0 * * *     False     1         22s             46m
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?