Desde agosto de 2013, estoy usando Mac Mini con OS X versión 10.8.2 como mi servidor web (pila MAMP). Tengo algunos trabajos programados de launchd programados a través de plist.
Todo funcionó bien hasta el 3 de noviembre de 2013, domingo. El cambio del horario de verano en ese día causó algunos problemas. Inicialmente, pensamos que el calendario de trabajos se ejecutaría alrededor de las 2 am, se ejecutaría dos veces, por ejemplo, el trabajo programado para las 02:45 am se ejecutaría a las 01:45 am y nuevamente se ejecutaría a las 02:45.
Luego de un examen detallado de los archivos de registro, descubrimos que no solo son los trabajos entre la 1:00 am y las 2:00 am, sino que todos los trabajos ejecutados ese día se ejecutan dos veces, exactamente una hora antes de la hora real y en el horario programado. A partir del día siguiente, Launchd comenzó a comportarse normalmente. Pensé que el launchd tiene la capacidad de manejar los cambios del horario de verano correctamente, como lo hace cron, pero para mi sorpresa no puedo encontrar ninguna información al respecto en el manual de launchd o en los foros de soporte.
De acuerdo con el último comentario en este hilo del foro de soporte de Apple, tengo que creerlo 'El problema se encuentra profundamente en el mecanismo de Launchd '. Si eso es cierto, cómo se comportará launchd en el próximo cambio de horario de verano el 9 de marzo, donde se omitirá de 2:00 a 3:00 es imprevisible. ¿Alguien puede sugerir su comportamiento en un cambio de inicio DST? ¿Cómo puedo hacer que maneje un cambio de final de horario de verano para que no ejecute los trabajos dos veces? EST 2014 es la zona horaria del servidor.
El formato de plist que estoy usando es:
<?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>report.groups</string>
<key>ProgramArguments</key>
<array>
<string>php</string>
<string>/var/www/mysite/reports/generateReportGroups.php</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>2</integer>
<key>Minute</key>
<integer>45</integer>
</dict>
</dict>
</plist>