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