[TYPO3-english] External Import ext: prevent manual when automatic job is running?

Jigal van Hemert jigal at xs4all.nl
Sat Sep 17 09:08:38 CEST 2011


Hi,

On 16-9-2011 10:40, Andre Flitsch wrote:
> I have the problem that my client is impatient, and sometimes cannot
> wait for the automatic import to run, so then they run it manually then
> we have some sort of collision in the database. So i need to stop them
> from messing up everything with their over excited clicking finger.

The usual old fashioned way to prevent parallel runs is to use a lock file.
At the beginning of your job you check if the lock file exists. If it 
exists and it is not too old you simply stop (the check for the age 
prevents crashed jobs from blocking future jobs forever).
Then you can create a lock file and run the job itself. At the end of 
the job you delete the lock file.

If you do this lock file juggling in the code which is shared between 
the automatic and the manual job (or use the same lock file for both) it 
also helps with your problem.

$lockfile = PATH_site . 'typo3temp/tx_myext.lock';
	// Check if job is already running
if (@file_exists($lockfile)) {
		// If the lock is not older than 1 hour, skip job
	if (filemtime($lockfile) > (time() - (60*60))) {
		// skip, it's already running
		//****
	} else {
		// continue, but it's an old lock file, report that
		// job took too long or crashed
		//****
	}
}
touch ($lockfile);
	// do actual job
@unlink ($lockfile);

An alternative solution might be to do the entire import in a single 
database transaction. That would at least solve the database collisions.

-- 
Kind regards / met vriendelijke groet,

Jigal van Hemert.


More information about the TYPO3-english mailing list