Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7610553
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 31, 20262026-05-31T01:26:42+00:00 2026-05-31T01:26:42+00:00

Ok so I have a cron that I need to run every 30 seconds.

  • 0

Ok so I have a cron that I need to run every 30 seconds.

Here is what I have:

*/30 * * * * /bin/bash -l -c 'cd /srv/last_song/releases/20120308133159 && script/rails runner -e production '\''Song.insert_latest'\'''

It runs, but is this running every 30 minutes or 30 seconds?

Also, I have been reading that cron might not be the best tool to use if I run it that often. Is there another better tool that I can use or install on Ubuntu 11.04 that will be a better option? Is there a way to fix the above cron?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-31T01:26:43+00:00Added an answer on May 31, 2026 at 1:26 am

    You have */30 in the minutes specifier – that means every minute but with a step of 30 (in other words, every half hour). Since cron does not go down to sub-minute resolutions, you will need to find another way.

    One possibility, though it’s a bit of a kludge(a), is to have two jobs, one offset by 30 seconds:

    # Need these to run on 30-sec boundaries, keep commands in sync.
    * * * * *              /path/to/executable param1 param2
    * * * * * ( sleep 30 ; /path/to/executable param1 param2 )
    

    You’ll see I’ve added comments and formatted to ensure it’s easy to keep them synchronised.

    Both cron jobs actually run every minute but the latter one will wait half a minute before executing the "meat" of the job, /path/to/executable.

    For other (non-cron-based) options, see the other answers here, particularly the ones mentioning fcron and systemd. These are probably preferable assuming your system has the ability to use them (such as installing fcron or having a distro with systemd in it).


    If you don’t want to use the kludgy solution, you can use a loop-based solution with a small modification. You’ll still have to manage keeping your process running in some form but, once that’s sorted, the following script should work:

    #!/bin/env bash
    
    # Debug code to start on minute boundary and to
    # gradually increase maximum payload duration to
    # see what happens when the payload exceeds 30 seconds.
    
    ((maxtime = 20))
    while [[ "$(date +%S)" != "00" ]]; do true; done
    
    while true; do
        # Start a background timer BEFORE the payload runs.
    
        sleep 30 &
    
        # Execute the payload, some random duration up to the limit.
        # Extra blank line if excess payload.
    
        ((delay = RANDOM % maxtime + 1))
        ((maxtime += 1))
        echo "$(date) Sleeping for ${delay} seconds (max ${maxtime})."
        [[ ${delay} -gt 30 ]] && echo
        sleep ${delay}
    
        # Wait for timer to finish before next cycle.
    
        wait
    done
    

    The trick is to use a sleep 30 but to start it in the background before your payload runs. Then, after the payload is finished, just wait for the background sleep to finish.

    If the payload takes n seconds (where n <= 30), the wait after the payload will then be 30 - n seconds. If it takes more than 30 seconds, then the next cycle will be delayed until the payload is finished, but no longer.

    You’ll see that I have debug code in there to start on a one-minute boundary to make the output initially easier to follow. I also gradually increase the maximum payload time so you’ll eventually see the payload exceed the 30-second cycle time (an extra blank line is output so the effect is obvious).

    A sample run follows (where cycles normally start 30 seconds after the previous cycle):

    Tue May 26 20:56:00 AWST 2020 Sleeping for 9 seconds (max 21).
    Tue May 26 20:56:30 AWST 2020 Sleeping for 19 seconds (max 22).
    Tue May 26 20:57:00 AWST 2020 Sleeping for 9 seconds (max 23).
    Tue May 26 20:57:30 AWST 2020 Sleeping for 7 seconds (max 24).
    Tue May 26 20:58:00 AWST 2020 Sleeping for 2 seconds (max 25).
    Tue May 26 20:58:30 AWST 2020 Sleeping for 8 seconds (max 26).
    Tue May 26 20:59:00 AWST 2020 Sleeping for 20 seconds (max 27).
    Tue May 26 20:59:30 AWST 2020 Sleeping for 25 seconds (max 28).
    Tue May 26 21:00:00 AWST 2020 Sleeping for 5 seconds (max 29).
    Tue May 26 21:00:30 AWST 2020 Sleeping for 6 seconds (max 30).
    Tue May 26 21:01:00 AWST 2020 Sleeping for 27 seconds (max 31).
    Tue May 26 21:01:30 AWST 2020 Sleeping for 25 seconds (max 32).
    Tue May 26 21:02:00 AWST 2020 Sleeping for 15 seconds (max 33).
    Tue May 26 21:02:30 AWST 2020 Sleeping for 10 seconds (max 34).
    Tue May 26 21:03:00 AWST 2020 Sleeping for 5 seconds (max 35).
    Tue May 26 21:03:30 AWST 2020 Sleeping for 35 seconds (max 36).
    
    Tue May 26 21:04:05 AWST 2020 Sleeping for 2 seconds (max 37).
    Tue May 26 21:04:35 AWST 2020 Sleeping for 20 seconds (max 38).
    Tue May 26 21:05:05 AWST 2020 Sleeping for 22 seconds (max 39).
    Tue May 26 21:05:35 AWST 2020 Sleeping for 18 seconds (max 40).
    Tue May 26 21:06:05 AWST 2020 Sleeping for 33 seconds (max 41).
    
    Tue May 26 21:06:38 AWST 2020 Sleeping for 31 seconds (max 42).
    
    Tue May 26 21:07:09 AWST 2020 Sleeping for 6 seconds (max 43).
    

    If you want to avoid the kludgy solution, this is probably better. You’ll still need a cron job (or equivalent) to periodically detect if this script is running and, if not, start it. But the script itself then handles the timing.


    (a) Some of my workmates would say that kludges are my specialty 🙂

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

If I have a cron job that run every 10 minutes and for some
I have a PHP page that I run every minute through a CRON job.
I have a PHP script that I need to run every minute. I have
I have a script that is going to be run by via CRON every
I have an update query being run by a cron task that's timing out.
I have this command that I run everyday via cron: find /home/get/public_html/videos -daystart -maxdepth
I want to run a cron job every minute that will launch a script.
I have a php script I need to run frequently, ie approx every 10
I have some python scripts that run on a daily basis in cron. How
I have a cron job that ideally I want to run hourly (it's on

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.