Skip to content

How to Use the Chef Cron Resource for Running Jobs Every Minute

Running tasks at precise intervals is crucial in many scenarios, including system management. With Chef and its cron resource, you can schedule jobs accurately down to minute-level granularity! Here’s how:

Understanding Cron Syntax with Chef Resource

Traditionally, crontab entries specify hours and minutes (e.g., 0 *). To run a task every five minutes using the standard cron syntax would require additional configuration steps outside of Chef resources alone. However, within your cookbook’s attributes or provisioning scripts in Ruby code with ChefDK/Kitchen can achieve this finer control:

cron 'Check-In to Chef Manage every minute' do
  # Using the correct syntax for repeating at five minutes intervals without specifying exact hours and minutes.
  minute '%*'
  
  command '/usr/bin/chef-client --check-impersonation &> /var/log/chef_checkin.log'
  action :create
end

In this example, the minute attribute uses %* to indicate every five minutes from minute zero without specifying exact times (e.g., ‘0’, ‘15’). The &> redirects both stdout and stderr into a log file for monitoring purposes. This approach provides precise execution control directly within your provisioning scripts.

Alternative Approach: Use chef-client with Cron Expressions

For more flexibility, you can employ crontab’s minute expressions alongside the Chef client resource in combination with a shell script that invokes multiple instances of chef-client for each time slice (e.g., every five minutes):

cron 'Chef Client Check at Specific Minutes Every Fifteen Second Interval' do 
   command '/usrsecho "chef client -j *5* && sleep 14" | while read job;do ${job};done &> /var/log/my_chec.out'
    schedule '*/15' # Set the interval to every fifteen seconds, but with a shell script handling minute logic separately
   action :create    
end

Here we set up chef-client in combination with an echo statement that includes conditional execution using logical operators (&&). The sleep command ensures separation of each Chef client’s run at the correct time slice. We use /var/log/ to direct output, allowing us fine control and monitoring within our infrastructure environment.

Conclusion: Mastering Time with Cron in Provision Scripts

By understanding how crontab expressions work alongside a Chef provision script using Ruby code or external shell scripts like Bash (or ShellCheck for validation), you can effectively run tasks at minute intervals—even every five minutes. Whether through detailed control within the cron resource itself, in your cookbook attributes, outside of its scope with separate logic and cron expressions, these methods offer precise timing without limitations inherent to standard crontab configurations alone!


Previous Post
Setting Environmental Variables with Glab Glub CL
Next Post
AWS Logging in Non Blocking Mode Handling Buffer