Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

Could you advise me what to write in crontab so that it runs some job (for testing I will use /usr/bin/chromium-browser) every 15 seconds?

share|improve this question
    
Instead of crontab, rely on some other event management system, for example: Perl's every.pm module will help you do this. –  Nikhil Mulley Jan 7 '12 at 18:22

3 Answers 3

up vote 8 down vote accepted

You can't go below one minute granularity with cron. What you can do is, every minute, run a script that runs your job, waits 15 seconds and repeats. The following crontab line will start some_job every 15 seconds.

* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job

This script assumes that the job will never take more than 15 seconds. The following slightly more complex script takes care of not running the next instance if one took too long to run. It relies on date supporting the %s format (e.g. GNU or Busybox, so you'll be ok on Linux). If you put it directly in a crontab, note that % characters must be written as \% in a crontab line.

end=$(($(date +%s) + 45))
while true; do
  some_job &
  [ $(date +%s) -ge $end ] && break
  sleep 15
  wait
done
[ $(date +%s) -ge $(($end + 15)) ] || some_job

I will however note that if you need to run a job as often as every 15 seconds, cron is probably the wrong approach. Although unices are good with short-lived processes, the overhead of launching a program every 15 seconds might be non-negligible (depending on how demanding the program is). Can't you run your application all the time and have it execute its task every 15 seconds?

share|improve this answer
    
Thanks for the tip, @Gilles :-) –  Nikhil Mulley Jan 7 '12 at 18:21

In short, cron is not that granular with time. The shortest period you will get is 1 min.

#       .---------------- minute (0 - 59)
#       |       .------------- hour (0 - 23)
#       |       |       .---------- day of month (1 - 31)
#       |       |       |       .------- month (1 - 12) OR jan,feb,mar,apr ...
#       |       |       |       |       .----- day of week (0 - 6) (Sunday=0 or 7)  OR sun,mon,tue,wed,thu,fri,sat
#       |       |       |       |       |
#       *       *       *       *       *       command to be executed
        *       *       *       *       /usr/bin/chromium-browser

However you could write a script that would run every 15 seconds...

share|improve this answer
    
I have a line * * * * * /usr/bin/chromium-browser in crontab. According to manual it should run every minute but nothing is running. –  xralf Apr 11 '11 at 19:12
    
Is it difficult to write such a script? Should I ask another question or could it be written here? –  xralf Apr 11 '11 at 19:13
    
Cron jobs don't have a terminal so I would expect the browser to fail. It may do so silently. –  BillThor Apr 11 '11 at 19:14
    
My cron logs are located in /var/log/cron for derivatives of redhat, ie. fedora, centos etc. It also may help for you to describe exactly what you are trying to do so people have a full picture of what is going on. –  rfelsburg Apr 11 '11 at 19:17

In your crontab:

* * * *  /usr/bin/chromium-browser_starter

Then in /usr/bin/chromium-browser_starter:

#!/bin/sh

# chromium-browser_starter
#
# Schedules /usr/bin/chromium-browser to run every 15 seconds for a minute.
# Intended to be called every minute through crond(8).

for ((secs=0; secs<46; secs+=15)); do
    (sleep $secs; /usr/bin/chromium-browser "$@") &
done

wait
share|improve this answer
    
When I write ps aux | grep chrom after a minute I can't see chromium-browser running. –  xralf Apr 11 '11 at 19:53
    
@xralf - The script only executes for a few seconds at most. Try grepping for sleep. –  amphetamachine Apr 14 '11 at 4:31

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.