In this article, we will see how to trigger a cronjob manually in Kubernetes Cluster. Cronjob in kubernetes is used for scheduling job to perform certain task such as backups, report generation, migration, data sync etc. Cronjob object is like a one line of crontab file used in Linux/Unix systems. A job can create one or more pods to complete the task. It will continue to retry execution of the pods until the specified number of them successfully complete and terminate. After reaching the specified number of successful completions, job will be marked as completed.
Sometimes, it is possible that after creating a cronjob, you would like to run it immediately for various reasons such as for testing the functionality, taking latest backup, urgent requirement of generating a report etc. Here we will see how you can easily do that. But even before that, let's understand the crontab syntax first.
┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23)
│ │ ┌───────────── day of the month (1 - 31)
│ │ │ ┌───────────── month (1 - 12)
│ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
│ │ │ │ │ 7 is also Sunday on some systems)
│ │ │ │ │ OR sun, mon, tue, wed, thu, fri, sat
│ │ │ │ │
* * * * *
How to trigger a cronjob manually in Kubernetes Cluster
Also Read: Kubernetes pod stuck in terminating state for long
When it comes to triggering a cronjob manually, you can use kubectl
utility to immediately create and trigger the job. The syntax to use is kubectl create job --from=cronjob/<name_of_cronjob> <name_of job_to_run>
. For example, in our case to trigger a cronjob called fscm-portal-api
, we have to use kubectl create job --from=cronjob/fscm-portal-api fscm-portal-api-manual
command as shown below. This will immediately create and run the fscm-portal-api-manual
job.
[cyberithub@node1 ~ % kubectl create job --from=cronjob/fscm-portal-api fscm-portal-api-manual
You can check the list of running or completed jobs by using kubectl get jobs
command as shown below.
[cyberithub@node1 ~ % kubectl get jobs NAME COMPLETIONS DURATION AGE fscm-portal-api-manual 0/1 7m35s 9m hcm-portal-api-29849074 1/1 2m6s 6h
The output can be interpreted as follows:-
- NAME is the name of the job triggered from cronjob
- COMPLETIONS shows the total number of pod completed/total number of pods in job
- DURATION is the total amount of time for which the job is running
- AGE is the total elapsed since the pod is created
To check the current status of the job, you can run kubectl get job fscm-portal-api-manual -o yaml
command and check the status
section. If the job is still running, it will show in active and running state as shown below.
[cyberithub@node1 ~ % kubectl get job fscm-portal-api-manual -o yaml ................................. status: active: 1 ready: 1 startTime: "2023-08-04T11:03:32Z"
To get the name of the pod job has created, you need to look for .metadata.name
field from kubectl get job fscm-portal-api-manual -o yaml
output as shown below.
[cyberithub@node1 ~ % kubectl get job fscm-portal-api-manual -o yaml ................... metadata: annotations: ............. name: fscm-portal-api-manual-008 ...................
You can also check the logs of the running job by checking the logs of the pod it created using kubectl logs -f <pod_name>
command. Since in our case, the pod that fscm-portal-api-manual
job has created is fscm-portal-api-manual-008-vwh75
so to check the logs, we have to run kubectl logs -f fscm-portal-api-manual-008-vwh75
command as shown below.
[cyberithub@node1 ~ % kubectl logs -f fscm-portal-api-manual-008-vwh75
If the job is completed, then it will show the status as complete
and succeeded
as you can see below.
[cyberithub@node1 ~ % kubectl get job fscm-portal-api-manual -o yaml .................................. status: completionTime: "2023-08-04T11:31:41Z" conditions: - lastProbeTime: "2023-08-04T11:31:41Z" lastTransitionTime: "2023-08-04T11:31:41Z" status: "True" type: Complete ready: 0 startTime: "2023-08-04T11:03:32Z" succeeded: 1
Once you are done using a cronjob, you can remove it by running kubectl delete cronjob <cronjob_name>
command. This will clean up all the pods it created to complete the task. If you suspend the job then it will not start as scheduled. If the job is already running then it will delete all its pods until the job is resumed again.
[cyberithub@node1 ~ % kubectl delete cronjob fscm-portal-api cronjob.batch "fscm-portal-api" deleted