Run a cronjob only when a file is modified?


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Run a cronjob only when a file is modified?
# 1  
Old 02-15-2012
Run a cronjob only when a file is modified?

Hello,

I am new to cron. I have a cronjob that updates a dataset in a 3rd party application. The contents of this dataset come from a text file, which is updated irregularly. Currently my cronjob runs once every week, to update this dataset (irrespective of whether the file was updated or not).

My task is to run the cronjob, if the file was modified say in the last 7 days. I can find if the file was modified using:

Code:
 
find /my_dir_name/my_Filename -mtime -7 -type f

And my cronjob is:

Code:
00 1 * * 5 (myScript > myLogFile)

Is there a way to combine these?

Thanks!
# 2  
Old 02-15-2012
Instead of worrying about calculating 'a week ago', let cron do that work. Just keep a temp file that you touch whenever you update the data. If the input datafile is newer than your tempfile -- or the tempfile doesn't exist -- you should update.

Code:
00 1 * * 5 [ /tmp/.lastupdate -nt /my_dir_name/my_Filename ] || ( myScript > myLogFile ; touch /tmp/.lastupdate )

# 3  
Old 02-15-2012
Quote:
Just keep a temp file that you touch whenever you update the data.
Do I need to maintain this manually and update everytime the "text file" is updated? I am confused - could you elaborate?

I do not edit/change the input data file. All I do is check whether or not the input data file was updated ->
if yes - Run the cron job to update the 3rd party database.
if No - Do nothing.

Last edited by ad23; 02-15-2012 at 04:53 PM..
# 4  
Old 02-15-2012
Quote:
Originally Posted by ad23
Do I need to maintain this manually and update everytime the "text file" is updated?
Of course not, that's what touch is for. It creates and/or updates its own temporary file.

It just uses the temporary file as a timestamp, "refreshing" it after it processes the data. If the data file is older than the timestamp file, then it's been processed already. If it's newer than the timestamp, it arrived after the last batch of processing.

You don't have to trust me, try it for yourself. Type these into your shell:

Code:
$ rm -f lastupdate # This doesn't need to exist yet
$ touch inputfile
$ [ lastupdate -nt inputfile ] || ( echo "Updating" ; touch lastupdate )
Updating

$ [ lastupdate -nt inputfile ] || ( echo "Updating" ; touch lastupdate )
$ [ lastupdate -nt inputfile ] || ( echo "Updating" ; touch lastupdate )
$ [ lastupdate -nt inputfile ] || ( echo "Updating" ; touch lastupdate )
$ touch inputfile
$ [ lastupdate -nt inputfile ] || ( echo "Updating" ; touch lastupdate )
Updating

$

# 5  
Old 02-15-2012
Thanks a bunch! I understand now.

Also, I want to add a check-point to this: to avoid updating the database while the input-text-file is being updated or if the file is corrupt (or does not exit). Is it advisable to check by file size, since the updated file will be larger than the old file? If yes, how can I accomplish this?

Thanks!
# 6  
Old 02-16-2012
What's your system?
# 7  
Old 02-16-2012
I am using Suse Linux 10 (x86-64)
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Run cronjob for every 10 minutes

Hi Friends, I have a requirement to run the cronjob for every 10 minutes from 2:00 AM to 6:00 AM. Does the below code works? If not, please advise. * * * * * command to be executed ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └---------------------------------- day of week (0 - 6) (0 is... (5 Replies)
Discussion started by: srikanthbiradar
5 Replies

2. Shell Programming and Scripting

How to accomplished to run zenity in cronjob?

Hi, I would like to ask some few questions about zenity. I write a script that would generate a report if any changes on the files. i want to used zenity to had a visual alarm report if theres some changes on the comparisons of the file.I used this line of zenity but it doesn't work in cronjob.... (5 Replies)
Discussion started by: jao_madn
5 Replies

3. Shell Programming and Scripting

Run a script when a file is modified/time stamp changed

Hi, I need to run a script file which uses a file and that file is modified as and when some alarms generated, it is not based on any fixed time period.. it may be modified even once in a minute for some time and once in 30 min or once in 20 min. Hence i need to watch for the timestamp change of... (3 Replies)
Discussion started by: aemunathan
3 Replies

4. AIX

My script didn't run every run every minute at cronjob

In my cronjob, I would like to schedule my script.sh to run every minutes. I crontab -e and have in line below but it didn't seems to run at all. * * * * * script.sh When I run it manually, I can run it. Is that anything wrong with the above line? If I change it to something like below,... (4 Replies)
Discussion started by: ngaisteve1
4 Replies

5. Shell Programming and Scripting

Doesn't run as a cronjob...

Hi! I have a svn backup script that works perfectly if I execute it from the command line but if I set it as a cronjob to run at night, only part of the code works. So, basically the scripts starts by deleting the folder yesterday and then moves the folder today to the folder yesterday. When... (4 Replies)
Discussion started by: ruben.rodrigues
4 Replies

6. UNIX for Dummies Questions & Answers

Run a script if file modified in last 10 min

Hi, I want to check if a file is modified or not in the last 10 mins and run a script if so. Thanks (8 Replies)
Discussion started by: krabu
8 Replies

7. Shell Programming and Scripting

How to schedule a cronjob to run every 15 mins ?

Hi, I want to schedule a job to run every 15 mins through cron. searched the forums and came up with this piece of code.i have given this in my crontab 0-59/15 * * * * sh /usr/ss/job But its not being run. Have i made any mistake here. Can any1 post the cron code for scheduling the... (5 Replies)
Discussion started by: suresh_kb211
5 Replies

8. UNIX for Dummies Questions & Answers

cronjob to run perl script

Hi all Recently i had finished a perl script. When i run manually, the script work fine. But when i wanted to put the script in cron, it didn't get the same output as it run manually. I felt that it only execute the script until certain line then it stop as i see most of the related files didn't... (6 Replies)
Discussion started by: AirWalker83
6 Replies

9. UNIX for Dummies Questions & Answers

how to retrieve original contents of a modified file (modified using vi)

Made changes to a file using vi editor and saved those changes now realised that the changes are not required How can I get the previous version of the file.i.e the one which was there on which I had made changes (3 Replies)
Discussion started by: novice100
3 Replies

10. UNIX for Advanced & Expert Users

cannot run cronjob

I have the following cron: 0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /v/sysadmin/sysnet/file.pl The .pl has been tried at 755 and 777 The script works if manually run by the web browser or unix command prompt, but I can't get the Cron to do it automatically i went... (3 Replies)
Discussion started by: shahrahulb
3 Replies
Login or Register to Ask a Question