A while ago now we started noticing a problem with Duplicate Execution Requests being shown in the execmgr.log on clients (“A Duplicate Execution Request is found for program <X>”) . In general, this problem occurs when a client receives a mandatory advert for a program that it already has an execution request for but is yet to run. The client sees that it now has two advert execution requests in the system for the same program and, not wanting to (or being able to) execute one in priority of the other, it logs a Duplicate Execution Request and executes neither.
In our enviornment we use a combination of collection maintenance windows, Wake-on-LAN for out-of-hours deployments, dynamically populated collections based on installed software and recurring adverts. The combination of these, but in particular the latter, led to a number of these events being logged. Here is an example of the sort of thing that was happening:
A mandate exists for all software installations to occur outside of working hours.
- CollectionX contains a dynamic collection of machines with ProductX NOT installed.
- CollectionX has an assigned maintenance window of 01:00 – 04:00 for out-of-hours deployments.
- Hardware inventory is run daily and machines that get ProductX installed, drop from CollectionX.
- AdvertX targets CollectionX with a recurring mandatory daily advert to install ProductX.
- AdvertX is scheduled to run at 03:00 every day.
- MachineX is powered on at 08:30 on Monday by UserX.
- MachineX rececives policy for AdvertX at 08:33.
- AdvertX changes state to waitingServiceWindow.
- MachineX is shut down by UserX at 17:30 on Monday having not run program.
- MachineX is powered on by Wake-On-LAN by the recurring advert at 02:00 on Tuesday.
- MachineX receives a new policy for the recurring advert.
- MachineX has not yet run the policy from Monday that is still pending a service window.
- MachineX therefore has 2 mandatory requests for the same program in the system and cannot run either.
- This process repeats every day thereafter, resulting in the software never getting installed.
There are a number of potential solutions (not all applicable to our scenario):
- Set the advertisement start date/time to the same as the mandatory assignment date/time so that a machine cannot receive the policy before it is set to run it.
- Set the advert to ignore maintenance windows so that if the machine misses the mandatory assignment date/time, it will run the program at the next available moment rather than the next recurrence.
- Turn recurrence off and set the program to always re-run (to include re-installations) so that the advert only goes out once to the desired collection, and then deal with any failures separately.
- Create a maintenance window during the day that would allow installations before UserX logs off (for example, if the reason for the out-of-hours maintenance window is to reduce the load around logon).
The following image shows an example of the behaviour as logged by the execmgr. The advert recurrs every week. In this example, the machine received the policy some time before the 04/01/2011, and was then woken up at 03:00 to install it, whereby it received the second execution request and from there on after, permanently had multiple requests in the system. Note, in the below example there is also a day-time maintenance window starting at 11:00.