変更履歴
ConcurrencyPolicy
→ concurrencyPolicy
頭文字が大文字「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]**で構わず登録
Cronjobの確認
登録したJobを確認したいのですが…okdのどの画面をみても登録したはずのwp-cron
がない…(汗
初回登録した時間が来たので確認したらApplications > Podsにありました!
CronJob名に定義した名前のPodをクリックすると詳細に飛びます。
実行結果はLog画面を参照すると標準出力の結果が出ています。
夜間(AM3:00)にCronJobを仕込んで翌朝確認したらLogが
「Logs are not available.」
やっぱ--spider
は良くなかったかな…(汗
ここでふと疑問に思ったことが…
CronJobを消すにはどうしたらいいのだろうか…
またokdの管理画面を探していくとRecources > Other Recourcesの中にjobなる文言が
ここで消えそうな気もしますが…
次回実行タスクだけが消える気もしないでもない。
Cronjobの変更
同じ名前でCronの時間のみを変更すると上書きするかどうか聞かれますので
Replace
をクリックすればOkです。
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