[launchd-dev] Restrict so only one instance runs

Dave Zarzycki zarzycki at apple.com
Wed Aug 27 17:07:19 PDT 2008


On Aug 27, 2008, at 4:42 PM, Crawford Kyle wrote:

>
> On Aug 27, 2008, at 3:29 PM, Dave Zarzycki wrote:
>
>>
>> On Aug 27, 2008, at 11:28 AM, Crawford Kyle wrote:
>>
>>> Hello,
>>>
>>> I often need to schedule scripts to run at an interval, but I don't
>>> know how long that script will take to complete and I don't want the
>>> script to run again at its normal interval unless the script isn't
>>> running.
>>>
>>> I've done this with pid files and grepping through ps lists to exit
>>> the script if another instance is running, but I was wondering if
>>> there is something built into launchd to handle this.
>>>
>>> I tried combining LaunchOnlyOnce with StartInterval, but with
>>> LaunchOnlyOnce, it seems that the job gets unloaded as soon as it
>>> runs, so the interval becomes pretty meaningless.
>>>
>>> Is there a way to do this with launchd?  Should there be a way to do
>>> this with launchd?
>>
>>
>> What you want is implicit with launchd. LaunchOnlyOnce will  
>> eventually get renamed to "HopefullyNeverExits" Just setup a  
>> StartInterval and you're set. If the job is still running, launchd  
>> will not start a second copy.
>
> Thanks Dave. I must be missing something.  Here is my job plist.   
> The shell script is just a test that logs to system log.
>
> I see a message in system log only once though. And the job no  
> longer shows in launchctl list after it runs.
>
> I tried this with and without OnDemand.
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd 
> ">
> <plist version="1.0">
> <dict>
>    <key>Label</key>
>    <string>com.company.test</string>
>    <key>ProgramArguments</key>
>    <array>
>        <string>/etc/testscript.sh</string>
>    </array>
>    <key>StartInterval</key>
>    <integer>30</integer>
>    <key>LaunchOnlyOnce</key>
>    <true/>
> </dict>
> </plist>



Delete the "LaunchOnlyOnce" key.

davez


More information about the launchd-dev mailing list