Sascha
Sascha

Reputation: 430

Does a Cron job overwrite itself

I can't seem to get my script to run in parallel every minute via cron on Ubuntu 14.

I have created a cron job which executes every minute. The cron job executes a script that runs much longer than a minute. When a minute expires it seems the new cron execution overwrites the previous execution. Is this correct? Any ideas welcomed.

I need concurrent independent running jobs. The cron job runs a script which queries a mysql database. The idea is to poll a db- if yes execute script in its own process.

Upvotes: 0

Views: 1833

Answers (3)

Andrew Porter
Andrew Porter

Reputation: 156

You need a locking mechanism to identify that the script is already running.

There are several ways of doing this but you need to be careful to use an atomic method.

I use lock directories as creating a directory is guaranteed to be atomic -

LOCKDIR=/tmp/myproc.lock

if ! mkdir $LOCKDIR >/dev/null 2>&1
then
  print -u2 "Processing already running - terminating"
  exit 1
fi

trap "rm -rf $LOCKDIR" EXIT

Upvotes: 0

user1917679
user1917679

Reputation: 33

This is a common occurrence. Try adding a check in your script to see if a lockfile already exists. If it does, exit. If not, continue.

Cronjobs are not overrun. They do however have the possibility of overlapping. Unless your script explicitly kills any pre-existing process, it shouldn't be able to stop the previously running script.

However, introducing the concept of lockfiles will save you from all these confusions altogether.

Upvotes: 0

Mr. Llama
Mr. Llama

Reputation: 20919

cron will not stop a previous execution of a process to start a new one. cron will simply kick off the new process even though the old process is still running.

If you need cron to terminate the previous process, you'll need to modify your script to handle that itself.

Upvotes: 2

Related Questions