BreadcrumbHomeResourcesBlog Cron Job Management: How To Keep Scheduled Tasks Under Control August 16, 2021 Cron Job Management: How to Keep Scheduled Tasks Under ControlHow to & Use CasesInfrastructure AutomationPuppet Enterprise can help manage your cron jobs and regularly scheduled tasks to ensure they aren't forgotten. Here's how it works.Table of ContentsWhat is a Cron Job?Cron Job Management ChallengesHow to Use Puppet Automation for Cron Job ManagementAutomate Cron Job Management with a Puppet Enterprise TrialTable of Contents1 - What is a Cron Job?2 - Cron Job Management Challenges3 - How to Use Puppet Automation for Cron Job Management4 - Automate Cron Job Management with a Puppet Enterprise TrialBack to topWhat is a Cron Job?A cron job is a recurring task that is scheduled at specific intervals. Cron jobs automate tasks like sending bulk emails, system maintenance, database cleanup, security scans, fetching updates, file system integrity checks, and more.While the underlying mechanisms, syntax, functions, and configurations differ between operating systems, automated scheduled tasks exist on both *nix OSes and Windows.On *nix OSes, cron jobs are scheduled using cron, a time-based job scheduler utility, and configurations for cron jobs are stored in crontab files.On Windows, cron jobs are called scheduled tasks and they're done using Task Scheduler (go figure). Task Scheduler features a GUI for managing cron jobs at specific times or intervals, or in reaction to a specific trigger.(For some triggers, Task Scheduler might not have the minute-level granularity of cron jobs run with cron on *nix, but they’re largely comparable for scheduling tasks.)Back to topCron Job Management ChallengesIT ops teams use cron jobs and scheduled tasks to make operations smoother. But as systems grow, the sheer scale of scheduled tasks can undo the operational efficiency they’re supposed to enable. Here’s why.Documentation, Documentation, DocumentationDocumentation is hard even with a small number of cron jobs, but it’s crucial, especially at scale. Keeping comprehensive documentation is essential to effective cron job management, maintenance, continuous ops, and knowledge transfer. Your team should be tracking the purposes and dependencies of cron jobs, as well as configurations, schedules, commands, and troubleshooting steps for each job.Setting Up a Lot of Cron Jobs Gets Pretty HairyCron job management is about more than just making sure they run when they’re supposed to. There are a lot of variables – multiple systems, multiple timezones, specialized tasks, and more complex jobs – and ballooning cron jobs can eat up resources during peak usage times.Cron Jobs Get Lost in the MixMany IT organizations use cron to run regularly scheduled tasks. The trouble is, it’s easy to forget what cron jobs exist where, and why. Forgotten cron jobs can wreak havoc on systems, and it's often difficult to track down the root cause: the forgotten cron task itself.💪 Get the Puppet skills you need to tackle (almost) anything:TAKE A PUPPET COURSEBack to topHow to Use Puppet Automation for Cron Job ManagementPuppet Enterprise includes a way to manage cron resources so you can see all the cron jobs under management from a central place, and know exactly what they do and when they do it.In this example, instead of creating a new cron job or scheduled task, we will take one that we know is correct and make sure that it is the same across all our systems.1. Check Existing Cron Jobs and Scheduled TasksCron jobspuppet resource cronScheduled tasks on Windowspuppet resource scheduled_taskOn one of my database servers I get:cron { 'unmanaged:su_-mysqlcheck_--databases_webportal_customer-1': ensure => 'present', command => 'mysqlcheck --databases webportal_customer', hour => ['0'], target => 'root', user => 'root', }This represents a cron job I created manually that verifies my customer database from my web portal application, every night at midnight.2. Create a Role and ProfileI'm going to add this to my Puppet code so that all the database servers for my web portal application run the same cleanup at the same time. To do that, I will first create a role and profile for this to live in.Now at this point, it might be tempting to create a profile called profile::cron_jobs and put all our cron jobs in there. However, we are going to create one called profile::webportal_database instead. This is because it makes more sense to group our Puppet resources by the particular component they are relevant to than by their type. Using the knowledge we acquired in Task 1, our profile will look like this:# site/profile/manifests/webportal_database.pp class profile::webportal_database { # This code is copy-pasted from the `puppet resource cron` command cron { 'vacuum_customer_database': ensure => 'present', command => 'mysqlcheck --databases webportal_customer', hour => ['0'], target => 'root', user => 'root', } }Note that I have changed the title of this resource to be more descriptive. This is just for readability.Now that I have created a profile, I can create a role for my web portal database server:# site/role/manifests/webportal_database class role::webportal_database { include profile::base # From Task 1 include profile::webportal_database # The one we just created }3. Deploy Your CodeNow deploy your code (the same as when we set up the Puppet server).4. Assign the New Role to Your Database ServersWe will assign our new role to our database servers by going into the Puppet Enterprise console and clicking Nodes > Classification > Add Group… This will allow us to add a group for our database servers and assign our new role to it.Create a group called Database Servers. Click the newly created group from the list, and under Pin specific nodes to the group, open it up, add your database servers, and click Pin. Now go to the Classes tab and add your new role. If it is not available yet, you may need to click the Refresh button in the middle right of the screen. Once you have added the role::webportal_database role, click Commit Changes.Run Puppet on your database servers using puppet agent -t or by clicking Run Puppet in the console.Back to topAutomate Cron Job Management with a Puppet Enterprise TrialPuppet Enterprise can help you automate tasks like these, including code deployment, to save you time and effort. If you're not using Puppet Enterprise for task automation, do yourself a favor and get started with a free trial today!Start My TrialThis blog was originally published on August 16, 2016 and has since been updated for accuracy and relevance.Back to top