Ok, so I have a couple of Java programs that I’m running using a chron job on a linux server. These jobs run every ten minutes or so, take literally two minutes to run, and then exit. I need to add a way for the programs to detect, when they start up, if there is already an instance of themselves running, and if so to exit without going any further. I’m really not sure of the best way to handle this though and am hoping someone can offer some advice.
One approach I’ve considered is to run a command line argument from the java code that does some sort of PS command and looks through those to see if it’s running. This seems pretty finicky and complex though for something so small. Plus, I’m not all that knowledgeable with linux and am not even sure the best way to do that. If anyone has some better thoughts, please let me know. Or if that is the best way, if you could provide the linux commands I’d need I’d appreciate it. Thanks.
If you have a writable /tmp directory you can use a lockfile.
When your Java program starts up, check for a file with a name unique to your application (e.g. “my-lock-file.lock”) in the /tmp directory. If none exists, create one, and remove it when you’re done. If one exists, just exit.
You can check the existence of a file with the .exists() method of the java.io.File class.
If your code needs to be portable, you can use
System.getProperty("java.io.tmpdir"));to get an appropriate temporary directory for the platform your code is running on.