What's an effective way of running CRON jobs in your NodeJS application?

In Software Development, we often have to automate certain processes, such as sending an email to a customer if he or she has not paid for a certain service by the end of the month.

Previously, without a robust information system, you would have people manually verifying, making a list and communicating with the respective customers.

Automation

Nowadays, you can do this process in batches, and an effective way of doing this - is by using cron jobs - requiring no human intervention at all. Another means is having an User Interface (UI) with several options, which can be used, particularly if the precise timing is unknown.

A batch is a group of things or people dealt with at the same time or considered similar in type [1]
The software utility cron also known as cron job1 is a time-based job scheduler in Unix-like computer operating systems. Users that set up and maintain software environments use cron to schedule jobs (commands or shell scripts) to run periodically at fixed times, dates, or intervals. [2]

The first time I used cron jobs was several years ago using the application Cron Tab for archiving data after a certain point in time.

For NodeJS, there are plenty of resources freely available on the net for doing batches. I am using node-cron, which is easy to install and use, if you already have expressed installed on your server.

https://github.com/kelektiv/node-cron

Once done, you can simply run your tasks in batches through the crons.

What is my strategy?

There are two strategies:

  1. the crons are used separately
  2. they are included in the apps

The first option is excellent for jobs that rely on calling different applications. For example, deleting a set of log files every week. You don't need to include these codes in your application; unless really needed or the logic can be shared.

I prefer including cron jobs in the server side applications so that I can reuse the existing classes, methods and logic. For instance, imagine having to rewrite the logic for a multi-tenant database, when it's already present and well tested. I just need to call the classes and use the methods.

References

[1] https://dictionary.cambridge.org/dictionary/english/batch

[2] https://en.wikipedia.org/wiki/Cron