Reputation: 68127
I've created a Kubernetes Scheduled Job, which runs twice a day according to its schedule. However, I would like to trigger it manually for testing purposes. How can I do this?
Upvotes: 335
Views: 271334
Reputation: 916
kubectl create job --from=cronjob/<cron-job-name> <job-name> -n <namespace>
you can use the to delete job execution at any time kubectl delete job <job-name> -n <namespace>
if you want to see the list of cron jobs available use kubectl get cronjobs -n <namespace>
Upvotes: 29
Reputation: 7708
If you can use tools beyond kubectl
, the K9s CLI is a wonderful tool that has, among other features, the trigger command that allow you to trigger cronjobs.
To do that, enter the K9s interface, search for your cronjobs using the command :cronjobs
, select the one you want to trigger and type t
.
Under the hood it probably creates a Job
using the CronJob
configuration, just like this answer suggested.
Upvotes: 9
Reputation: 5705
The issue #47538 that @jdf mentioned is now closed and this is now possible. The original implementation can be found here but the syntax has changed.
With kubectl v1.10.1+ the command is:
kubectl create job --from=cronjob/<cronjob-name> <job-name> -n <namespace-name>
It seems to be backwardly compatible with older clusters as it worked for me on v0.8.x.
Upvotes: 531
Reputation: 20015
Unfortunately, none of the example syntaxes above works in Google Kubernetes Engine (GCP). Also, the GKE docs themselves are wrong.
In Kubernetes 1.10.6.gke-2
, the working syntax is:
kubectl create job <your-new-job-name> --from=cronjob/<name-of-deployed-cron-job> -n <target namespace>
Upvotes: 23
Reputation: 171
There is an option to trigger the cron job manually whithin this tab in k8s dashboard
Upvotes: 9
Reputation: 739
EDIT - July 2018: see @pedro_sland's answer as this feature has now been implemented
My original answer below will remain correct for older versions of kubectl less than v1.10.1
========================================================================
Aside from creating a new job (as the other answers have suggested), there is no current way to do this. It is a feature request in with kubernetes now that can be tracked here: https://github.com/kubernetes/kubernetes/issues/47538
Upvotes: 9
Reputation: 41
I've created a small cmd utility for convenience to do just that and also suspend and unsuspend cronjobs.
https://github.com/iJanki/kubecron
Upvotes: 3
Reputation: 3537
If you want to test the job, create a Job config from your Cron Job (ScheduledJob) config and run it manually using the following command:
kubectl create -f ./job.yaml
Upvotes: 1
Reputation: 8426
You can create a simple job based on your ScheduledJob. If you already run a ScheduledJob, there are jobs in history.
kubectl get jobs
NAME DESIRED SUCCESSFUL AGE
hello-1477281595 1 1 11m
hello-1553106750 1 1 12m
hello-1553237822 1 1 9m
Export one of these jobs:
kubectl get job hello-1477281595 -o yaml > my_job.yaml
Then edit the yaml a little bit, erasing some unnecessary fields and run it manually:
kubectl create -f my_job.yaml
kubectl delete -f my_job.yaml
Upvotes: 30