BreadcrumbHomeResourcesBlog Cron Job Management With Puppet Enterprise August 16, 2021 Cron Job Management with Puppet EnterpriseHow to & Use CasesInfrastructure AutomationBy Dylan RatcliffePuppet Enterprise can help manage your cron jobs and regularly scheduled tasks to ensure they aren't forgotten. Here's how it works.Table of Contents:What is a Cron Job?The Challenge of Cron Job ManagementHow to Use Puppet Automation for Cron Job ManagementWhat is a Cron Job?A cron job is a recurring task that is scheduled at specific intervals using cron, a time-based job scheduler in Unix-like operating systems. It's useful for automating repetitive tasks like sending bulk emails, system maintenance, database cleanup, and more.The Challenge of Cron Job ManagementMany 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.Puppet 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.Want to Do Even More with Puppet?TAKE A PUPPET COURSEHow to Use Puppet Automation for Cron Job ManagementIn 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.Ready to try Puppet Enterprise for task automation? 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.
Dylan Ratcliffe Professional Services Engineer, Puppet by Perforce Dylan Ratcliffe is a professional services engineer at Puppet.